【发布时间】:2014-05-17 10:54:07
【问题描述】:
这是我的第一篇文章,如果我未能在本网站上遵循正确的格式/约定等,敬请见谅。我只编程了几个星期。
无论如何,我正在使用布尔变量和 while 循环编写一个基本的 Java 程序。该代码至少可以说非常“笨拙”,并且肯定可以变得更加优雅(尽管不是我有限的技能,所以再次道歉)。 如果布尔变量为真,则代码将正常运行。但是,如果变量为假,代码会进入一个 while 循环,即使输入了应该使语句为真的输入,循环也会继续进行。 知道是什么导致了这个无限循环。我几乎可以肯定这是基本的东西,但我似乎无法弄清楚。这是下面的代码。谢谢!
import java.util.Scanner;
import java.util.Random;
import static java.lang.System.out;
import static java.lang.System.in;
public class MB1 {
public static void main(String args[]){
char a, b, c, d;
Scanner myScanner = new Scanner(in);
boolean secondBoolean;
out.println("Let's get started! Type in your 4-digit code:");
a = myScanner.findWithinHorizon(".", 0).charAt(0);
b = myScanner.findWithinHorizon(".", 0).charAt(0);
c = myScanner.findWithinHorizon(".", 0).charAt(0);
d = myScanner.findWithinHorizon(".", 0).charAt(0);
secondBoolean = ((a == '1'|| a == '2'|| a == '3' || a == '4' || a == '5' || a == '6' || a == '7')
&& (b == '1' || b == '2'|| b == '3' || b == '4' || b == '5' || b == '6' || b == '7')
&& (c == '1' || c == '2'|| c == '3' || c == '4' || c == '5' || c == '6' || c == '7')
&& (d == '1' || d == '2'|| d == '3' || d == '4' || d == '5' || d == '6' || d == '7'));
while (secondBoolean == false) {
out.println("The code you typed is not valid. Please type a different code:");
a = myScanner.findWithinHorizon(".", 0).charAt(0);
b = myScanner.findWithinHorizon(".", 0).charAt(0);
c = myScanner.findWithinHorizon(".", 0).charAt(0);
d = myScanner.findWithinHorizon(".", 0).charAt(0);
out.print(a);out.print(b);out.print(c);out.print(d);
}
if (secondBoolean == true){
out.println('0');
}
}
}
【问题讨论】:
-
旁注:这个布尔表达式真的很难看,很难阅读。我会把它改成
secondBoolean = a >= '1' && a <= '7' || b >= '1' && b <= '7' || c >= '1' && c <= '7' || d >= '1' && d <= '7' -
你的代码缩进关闭了。
-
你的无限循环问题已经有足够的答案了,我只是建议使用“do while”循环来减少代码的冗余(重复输入和布尔赋值部分)
标签: java while-loop boolean infinite-loop