java循环结构-3

简介: 指导——计算100以内的偶数之和

5.4 技能训练


上机练习 1


指导——计算100以内的偶数之和


训练要点


while循环结构。

程序调试。

需求说明


编程实现:计算100以内的偶数之和。

设置断点并调试程序,观察每一次循环中变量值的变化。

实现思路及关键代码


(1)声明并初始化循环变量:int num=0。


(2) 分析循环条件和循环操作。


循环条件:num<=100。

循环操作:累加求和。

(3) 套用while循环结构写出代码。


参考解决方案


package cn.jbit.loops1;
public class EvenSum {
   /*
    * 计算100以内偶数之和
    */
   public static void main(String[] args) {
      int sum = 0;   //当前之和
      int num = 2;   //加数
      while(num <= 100){
         sum = sum + num;   //累加
         num = num + 2;
      }
      System.out.println("100以内的偶数之和为:" + sum);
   }
}


上机练习2


指导——查询商品价格


训练要点


while循环结构。

需求说明


用户从控制台输入需要查询的商品的编号,根据编号显示对应的商品价格。假设商品名称和商品价格:T恤¥245.0,网球鞋¥570.0,网球拍¥320.0。

♦ 循环查询商品价格。


♦ 输入"n" 结束循环。


♦ 程序运行结果如图5.14所示。


图5.14查询商品价格的运行结果


实现思路及关键代码


(1)声明变量,存储商品信息:name(商品名称)、price(商品价格)和goodsNo(商品编号)。


(2)循环体:根据用户输入的商品编号,使用switch语句选择该编号对应的商品信息并输出。


switch(goodsNo){
             case 1:
            //给变量name和price赋予1号商品信息
            break;
            case 2:
            //给变量name和price赋予2号商品信息
            break;
            case 3:
            //给变量name和price赋予3号商品信息
            break;
         }


(3) 循环条件:当用户输入"y" 时继续执行循环体。

while("y".equals(answer)){
}


参考解决方案


package cn.jbit.loops1;
import java.util.Scanner;
public class PriceLookup {
   /*
    * 商品价格查询
    */
   public static void main(String[] args) {
      String name = "";     //商品名称
      double price = 0.0;       //商品价格
      int goodsNo = 0;      //商品编号
      System.out.println("MyShopping管理系统  > 购物结算\n");
      //商品清单
      System.out.println("*******************************************");
      System.out.println("请选择购买的商品编号:");
      System.out.println("1.T 恤        2.网球鞋        3.网球拍");
      System.out.println("*******************************************");
      Scanner input = new Scanner(System.in);
      String answer = "y";   //标识是否继续
      while("y".equals(answer)){
         System.out.print("请输入商品编号:");
         goodsNo = input.nextInt();
         switch(goodsNo){
         case 1:
            name = "T 恤";
            price = 245.0;
            break;
         case 2:
            name = "网球鞋";
            price = 570.0;
            break;
         case 3:
            name = "网球拍";
            price = 320.0;
            break;
         }
         System.out.println(name+ "\t" + "¥" + price +"\n");
         System.out.print("是否继续(y/n)");
         answer = input.next();
      }
      System.out.println("程序结束!");
   }
}


上机练习3


练习——升级购物结算


需求说明


循环输入商品编号和购买数量,系统自动计算每种商品的价钱(单价X购买数量),并累加到总金额。

当用户输入"n"时,表示需要结账,则退出循环开始结账。

结账时,根据折扣(假设享受八折优惠)计算应付金额,输入实付金额,计算找零。

程序运行结果如图5.15所示。

图5.15购物结算的运行结果


提示:


在上机练习2的基础上,增加如下变量存储信息。

int amount = 0;           //购买数量


double discount = 0.8;    //折扣比例


double total = 0.0;       //商品总价


double payment = 0.0;     //实付金额


循环输入商品编号和购买数量,计算购买此商品的合计金额并累加到总金额。

退出循环结账时,根据折扣显示应付金额,输入实付金额后,显示找钱。

参考解决方案

package cn.jbit.loops1;
import java.util.Scanner;
public class Pay {
    /*
     * 购物结算
     */
    public static void main(String[] args) {
        String name = "";     //商品名称
        double price = 0.0;       //商品价格
        int goodsNo = 0;      //商品编号
        int amount = 0;          //购买数量
        double discount = 0.8; //折扣比例
        double total = 0.0;       //商品总价
        double payment = 0.0;  //实付金额
        //商品清单
        System.out.println("*******************************************");
        System.out.println("请选择购买的商品编号:");
        System.out.println("1.T 恤        2.网球鞋        3.网球拍");
        System.out.println("*******************************************");
        Scanner input = new Scanner(System.in);
        String answer = "y";   //标识是否继续
        while("y".equals(answer)){
            System.out.print("\n请输入商品编号:");
            goodsNo = input.nextInt();
            switch(goodsNo){
                case 1:
                    name = "T 恤";
                    price = 245;
                    break;
                case 2:
                    name = "网球鞋";
                    price = 570;
                    break;
                case 3:
                    name = "网球拍";
                    price = 320;
                    break;
            }
            System.out.print("请输入购买数量:");
            amount = input.nextInt();
            System.out.println(name+ "¥" + price +"\t数量 " + amount
                    + "\t合计 ¥" + price*amount);
            total += price*amount;
            System.out.print("是否继续(y/n)");
            answer = input.next();
        }
        System.out.println("\n折扣:" + discount);
        System.out.println("应付金额:" +total*discount);
        System.out.print("实付金额:");
        payment = input.nextDouble();
        while(payment - total*discount < 0){
            System.out.print("您输入的金额小于应付金额,请重新输入:");
            payment = input.nextDouble();
        }
        System.out.println("找钱:" + (payment - total*discount));
    }
}

5.5 do-while循环


通过前面的学习我们知道,当一开始循环条件就不满足的时候,while循环一次也不会执行。有时有这样的需要:无论如何循环都先执行一次,再判断循环条件,决定是否继续执行。do-while循环结构就满足这样的需要。


5.5.1 为什么需要 do-while 循环


问题:经过几天的学习,老师给张浩一道测试题,让他上机编写程序,然后老师检查是否合格。如果不合格,则继续编写。


分析:这次和5.2.2节的示例5情况不同,张浩要先上机编写程序(执行循环操作),再问老师是否合格(判断循环条件)。while循环的特点是先判断,再执行,已经不适合这种情况。这时我们需要do-while循环解决该问题。


5.5.2  什么是 do-while 循环


下面看一看do-while循环是什么样的,如表5-2所示。


表 5-2 do-while 循环


image.png

和while循环不同,do-while循环以关键字do开头,然后是大括号括起来的循环操作,接着才是while关键字和紧随的小括号括起来的循环条件。需要注意的是,do-while循环结构以分号结尾。


结合表5-2, do-while循环的执行顺序一般如下。


(1) 声明并初始化循环变量。


(2) 执行一遍循环操作。


(3) 判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。


do-while循环的特点是先执行,再判断。


根据do-while循环的执行过程可以看出,循环操作至少执行一遍。


5.5.3 如何使用 do-while 循环


使用do-while循环解决问题的步骤与采用while循环解决问题的步骤是类似的。


说明:使用do-while循环解决问题的步骤如下。


(1) 分析循环条件和循环操作。


(2) 套用do-while语法写出代码。


(3) 检查循环能否退出。


现在使用do-while循环解决5.5.1节提出的问题。根据上面的步骤可知,循环条件是老师评价不合格,循环操作是上机编写程序。套用do-while语法,写出如示例7所示的代码。


示例7

package cn.jbit.loops1;
import java.util.Scanner;
public class DoWhileDemo {
    /*
     * 如何使用do-while循环
     */
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String answer = "";       //标识是否合格
        do{
            System.out.println("上机编写程序!");
            System.out.print("合格了吗?(y/n)");
            answer = input.next();
            System.out.println("");
        }while(!"y".equals(answer));
        System.out.println("恭喜你通过了测试!");
    }
}


检查一下,当输入为y的时候,程序退出循环。程序运行结果如图5.16所示。


图5.16示例7的运行结果


常见错误2


使用do-while循环结构解决问题时,经常会遇到下面的错误。


public class ErrorDemo {
    public static void main(String args[]) {
        int i;
        do {
            System.out.println("循环");
            i++;
        } while (i < 4)
    }
}

分析代码会发现while后缺少分号 , 程序编译将出现编译错误。


所以,while后面的分号是必需的,千万不要忘记。


对比:学习了 while和do-while两种循环结构,那么这两种循环结构有什么异同呢?


相同点:都是循环结构,使用“while(循环条件)”表示循环条件,使用大括号将循环操作括起来。


不同点:表现在以下三个方面。


语法不同。与while循环结构相比,do-while循环结构将while关键字和循环条件放在后面,而且前面多了关键字do , 后面多了一个分号。

执行次序不同。while循环结构先判断,再执行;do-while循环结构先执行,再判断。

在一开始循环条件就不满足的情况下,while循环结构一次都不会执行,do-while循环结构则不管什么情况都至少执行一次。

5.5.4 技能训练


上机练习4


练习——升级菜单切换


需求说明


进入系统主菜单后,提示用户输入数字,然后根据选择进入相应的功能模块。

如果用户输入错误,则可以重复输入,直到输入正确,执行相应的操作后退出循环。


程序运行结果如图5.17所示。

图5.17菜单切换的运行结果


提示:


声明boolean类型变量isRight来标识用户的输入是否正确,初值为true。如果输入错误,则其值变为fhlse。


使用do-while循环结构:循环体中接收用户的输入,利用switch语句执行不同的操作,循环体至少执行一次。


循环条件是判断isRight的值。如果为false则继续执行循环体;否则退出循环,程序结束。


代码提示:


package cn.jbit.loops1;
import java.util.Scanner;
public class MainMenu {
   /*
    * 升级菜单切换
    */
   public static void main(String[] args) {
      System.out.println("欢迎使用MyShopping管理系统\n");
      System.out.println("*******************************");
      System.out.println("\t1.客 户 信 息 管 理");
      System.out.println("\t2.购 物 结 算");
      System.out.println("\t3.真 情 回 馈");
      System.out.println("\t4.注 销");
      System.out.println("*******************************\n");
      int choice;       //用户选择
      boolean isRight;   //输入是否正确
      System.out.print("请选择,输入数字:");
      Scanner input = new Scanner(System.in);
      do{
         isRight = true;
         choice = input.nextInt();
         if(choice == 1){
            System.out.println("执行客户信息管理");
         }else if(choice == 2){
            System.out.println("执行购物结算");
         }else if(choice == 3){
            System.out.println("执行真情回馈");
         }else if(choice == 4){
            System.out.println("执行注销");
         }else{
            System.out.print("输入错误,请重新输入数字:");
            isRight = false;
         }
      }while(!isRight);
      System.out.println("\n程序结束");
   }
}


本章总结


循环结构由循环条件和循环操作构成。只要满足循环条件,循环操作就会反复执行。

使用循环解决问题的步骤:分析循环条件和循环操作,套用循环的语法写出代码,检查循环能否退出。

编写循环结构代码时需注意:循环变量的初值、循环操作中对循环变量值的改变和循环条件三者间的关系;确保循环次数正确,不要出现"死循环"。

while循环结构的特点是先判断,后执行;do-while循环结构的特点是先执行,再判断。

程序调试是满足暂停程序、观察变量和逐条执行语句等功能的工具和方法的总称。其主要方法包括设置断点、单步运行和观察变量。


相关文章
|
7月前
|
Java
Java 循环结构
4月更文挑战第9天
|
7月前
|
Java
Java循环结构
Java循环结构
52 0
Java 循环结构 - for, while 及 do...while
Java 循环结构 - for, while 及 do...while
|
4月前
|
Java C语言
|
6月前
|
存储 Java 数据处理
Java中的循环结构语句详解与实战应用
Java中的循环结构语句详解与实战应用
80 2
|
7月前
|
Java
Java中的循环结构详解
Java中的循环结构详解
147 1
|
7月前
|
Java
Java中的判断和循环结构
Java中的判断和循环结构
57 1
|
Java
Java的流程控制(选择结构语句 if ~ switch &循环结构语句dowhile ~ for)
程序执行的控制流程分为三种,也称为三种结构,分别是:顺序结构、和循环结构。 顺序结构指的是程序执行按照代码的编写顺序,依次从上往下开始执行,直到程序结束。程序的执行默认是顺序执行的
134 1
|
7月前
|
Java
Java程序设计基础——循环结构
Java程序设计基础——循环结构
|
7月前
|
Java C语言
【Java开发指南 | 第十二篇】Java循环结构
【Java开发指南 | 第十二篇】Java循环结构
36 2