请优化这段代码:for (int i = 0; i < 6; i++) { //同样用死循环限制输入的合法性 System.out.println("请输入第" + (i + 1) +"个红球的号码:"); do { userRed [i] = sc.nextInt(); //初始化b b = true; //判断用户选择的红球号码是否是1~33中的一个 if (userRed [i] > 0 && userRed [i] < 34) { //如果是,则把选择的红球号码存入数组choiseRed,并使用for循环遍历choiseRed数组 choiseRed [i] = userRed [i]; for (int j = 0; j < choiseRed.length; j++) { //判断选择的数是否包含于choiseRed数组(已经被选过或者说选择重复) if (userRed [i] == choiseRed [j]) { //如果包含,提示用户选择重复,j的值减1重新选择,并继续循环 System.out.println("您选择了重复的号码!请重新选择第" + (i + 1) + "个号码(1~33):"); //b的值仍为true b = true; } else { //如果不包含,说明选号可能成功,b变为false b = false; } } } else { //如果不满足1~33,提示选择错误,i的值减1重新选择,并继续循环 System.out.println("选号失败,请输入正确的第" + (i + 1) + "个号码(1~33):"); } } while (b); }
时间: 2023-06-04 20:02:32 浏览: 84
&& userRed [i] 33) { System.out.println("您输入的红球号码有误,请重新输入:"); b = false; } //判断用户选择的红球号码是否已经选择过 for (int j = 0; j < i; j ) { if (userRed [j] == userRed [i]) { System.out.println("您输入的红球号码已经选择过,请重新输入:"); b = false; break; } } } while (!b); }
优化后的代码如下:
Scanner sc = new Scanner(System.in);
int[] userRed = new int[6];
for (int i = 0; i < 6; i++) {
System.out.println("请输入第" + (i + 1) + "个红球的号码:");
int number = sc.nextInt();
boolean isValid = number >= 1 && number <= 33;
boolean isDuplicate = false;
for (int j = 0; j < i; j++) {
if (userRed[j] == number) {
isDuplicate = true;
break;
}
}
if (!isValid || isDuplicate) {
System.out.println("您输入的红球号码有误或已经选择过,请重新输入:");
i--;
continue;
}
userRed[i] = number;
}
优化的思路是将输入的逻辑与限制条件分离开来,避免重复代码和死循环。使用一个循环来遍历输入6个红球号码,每次循环内部对于输入的号码进行判断,判断有效性和是否有重复,如果不合法则提示重新输入,并退回到上一次循环。如果合法,则正常保存号码,进入下一个循环。这样能够更加清晰、简洁地完成输入限制的需求,并且方便后续代码的扩展和修改。
阅读全文