java循环结构-3

 

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:
            //
给变量nameprice赋予1号商品信息
            break;
            
case 2:
            //
给变量nameprice赋予2号商品信息
            break;
            
case 3:
            //
给变量nameprice赋予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 循环

语 

流程图

举  例

do {

//循环操作

} while(循环条件);

int i=1;

do {

  System.out.println(好好学习!)

  i++;

} while ( i <= 100);

和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循环结构的特点是先执行,再判断。
  • 程序调试是满足暂停程序、观察变量和逐条执行语句等功能的工具和方法的总称。其主要方法包括设置断点、单步运行和观察变量。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值