在实验中使用while或do-while循环语句的情况
-
编写一个Java Application程序,模拟双色球数字生成器,同时生成6个1-32以内的红球数字和1个1-16以内的蓝球数字,要求数字不能为0且不能有重复。
生成蓝球数字的方法:
public static int blueBall() {
int b;
do {
b = r.nextInt(16);
}while(b==0);
return b;
}
变量b相当于一个用于接收随机数的容器。其实用while和do-while都可以,只是由于while循环的特性,必须先把b初始化为0,才能启用while循环;而do-while循环中为b赋值的语句一定会执行,不受b初始情况的影响,因而可以忽略b的初始情况。这样也更符合我的思维习惯。但面对字符串等类型的变量,初始情况有时是需要考虑的。如下题:
-
编写一个Java Application程序,实现如下的设计目标:接收用户键盘输入学生学号打印出该学生的年级、班级、编号, 直到输入“#”结束。
接收键盘输入的方法:
使用while时,即使将s初始化为null并做了判断,且使用了try-catch进行异常处理,仍然出现了空指针异常,程序被迫中断。
public String Resever() {
input = new Scanner(System.in);
ArrayList<String> info = new ArrayList<String>();
System.out.println("请输入学号:");
try {
while(!s.equals("#")|s.equals(null)) {
s = input.nextLine();
info.add(s);
}
}catch(Exception e) {
e.printStackTrace();
}
str = String.valueOf(info);
return str;
}
而do-while循环成功规避了这种情况:
public String Resever() {
input = new Scanner(System.in);
ArrayList<String> info = new ArrayList<String>();
System.out.println("请输入学号:");
do {
s = input.nextLine();
info.add(s);
}while(!s.equals("#"));
str = String.valueOf(info);
return str;
}
-
编写一个Java Application程序,实现如下的设计目标:程序运行时自动产生1~100的随机数,接收用户键盘输入数据并给出提示信息,直至猜对。游戏者猜对后,显示猜测次数,并提供“重新开始”和“退出”功能。
游戏过程及“重新开始”和“退出”功能的方法:
public void Replay() {
order = new Scanner(System.in);
while(true) {
System.out.print("\n(按“Y”重新开始,按“N”退出)");
s = order.next();
if("Y".equalsIgnoreCase(s)) {
gameProcess();
}else if("N".equalsIgnoreCase(s)) {
break;
}else {
System.out.print("输入错误,请重新输入:");
}
}
System.exit(0);
}
public void gameProcess() {
input = new Scanner(System.in);
int gameValue = (int) (Math.random() * 100);
int count = 0;
System.out.print("欢迎进入猜数游戏!\n输入一个1~100之间的数,猜猜我所想的数:");
while(count < 10) {
if(count > 0 && count < 9) {
System.out.print(",再来:");
}
number = input.nextInt();
numberChecker();
count++;
if(number < gameValue) {
System.out.print("您猜的数小了");
}else if(number > gameValue) {
System.out.print("您猜的数大了");
}else {
System.out.print("恭喜您,猜对了!\n您猜了"+count+"次");
break;
}
}
if(count == 10 &&number != gameValue) {
System.out.println("\n很遗憾,您没能猜出来……\n答案是:"+gameValue);
}
}
有参考。在过程中尝试使用了do-while循环语句,但为了让代码更整洁,最终还是用了while循环。如果使用do-while循环,循环结束后还要针对count的情况继续讨论,比较凌乱。
while与do-while循环语句用法及对比小结
while循环语句
- 需要留意变量的初始条件,更适用于不牵涉到变量初始条件,以及判断条件较复杂的情况;
- 在数据结构的运用中不可或缺;
- 使用过程中容易造成循环无法执行的情况,或者引发异常。
do-while循环语句
- 更适用于处理字符串等使用时容易引发异常的数据,以及必须从键盘接收数据而不方便初始化的变量;
- 尤其适用于为变量循环赋值的情况;
- 更符合人的思维习惯(?),但可能会使代码凌乱,可维护性变差。
能力有限,有错致歉,欢迎指正