Java实验复盘:while与do-while循环语句用法及对比

在实验中使用while或do-while循环语句的情况

  1. 编写一个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的初始情况。这样也更符合我的思维习惯。但面对字符串等类型的变量,初始情况有时是需要考虑的。如下题:

  1. 编写一个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;
	}

在这里插入图片描述

  1. 编写一个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循环语句
  1. 需要留意变量的初始条件,更适用于不牵涉到变量初始条件,以及判断条件较复杂的情况;
  2. 在数据结构的运用中不可或缺;
  3. 使用过程中容易造成循环无法执行的情况,或者引发异常。
do-while循环语句
  1. 更适用于处理字符串等使用时容易引发异常的数据,以及必须从键盘接收数据而不方便初始化的变量;
  2. 尤其适用于为变量循环赋值的情况;
  3. 更符合人的思维习惯(?),但可能会使代码凌乱,可维护性变差。

能力有限,有错致歉,欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值