关于8-2项目作业的问题
问题描述:想要嵌套两个for循环,但是逻辑有点理不清楚,
代码要如何改进呢
相关代码:
int money;//消费金额
int times;//抽奖次数
int i=(int)(Math.random()*10);//奖品编号
while (true) {
System.out.println("请输入本次消费的总金额");
Scanner sc = new Scanner(System.in);
money = sc.nextInt();
if (money >= 100) {
System.out.println("您具有三次抽奖机会");
for (int j = 1; j <=3 ; j++) {
System.out.println("请开始您的第" + j + "次抽奖");
Scanner sc2 = new Scanner(System.in);
times = sc2.nextInt();
for (int k = 1; k <= 3; k++) {
if (i <= 3) {
if (i == 1) {System.out.println("恭喜你抽中一等奖--键盘一台");
break;}else
if (i == 2) {System.out.println("恭喜你抽中二等奖--键盘一台");
break;}else
if (i == 3) {
System.out.println("恭喜你抽中三等奖--键盘一台");
break;
}
} else if (i == 0) {
System.out.println("很遗憾下次再来吧");
}
}
}
} else {
System.out.println("您的消费金额不足100元,不能抽奖");
break;
}
}
}
64
收起
正在回答
1回答
同学你好,代码中存在如下问题:
1、将Scanner放在循环外面,避免重复创建浪费资源。
2、每次抽奖都需随机产生一个新的随机数,故需将产生随机数定义在里层循环内部。
3、因为抽奖机会是随机的,所以无需用户再次从控制台输入数据,直接对产生随机数进行判断即可。
4、判断完产生的随机数后,需继续执行循环,无需使用break结束循环。
具体内容请查看下方截图,注释中有相关解析。如下所示:

int money;// 消费金额
int i;// 奖品编号
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入本次消费的总金额(输入-1退出)");
money = sc.nextInt();
if (money >= 100) {
System.out.println("您具有三次抽奖机会");
for (int j = 1; j <= 3; j++) {
System.out.println("请开始您的第" + j + "次抽奖");
i = (int) (Math.random() * 4);//每次抽奖都需要产生随机的数字,故需要放到循环内书写。产生随机数为:0~3
if (i == 1) {
System.out.println("恭喜你抽中一等奖--键盘一台");
} else if (i == 2) {
System.out.println("恭喜你抽中二等奖--键盘一台");
} else if (i == 3) {
System.out.println("恭喜你抽中三等奖--键盘一台");
} else {
System.out.println("很遗憾下次再来吧");
}
}
} else if(money==-1){
System.out.println("欢饮下次光临!");
break;//跳出循环,程序结束
} else {
System.out.println("您的消费金额不足100元,不能抽奖");
continue;//结束当前循环,进入下一轮循环
}
}祝学习愉快~
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星