我的代码应该保持循环,直到给定一个有效的输入,即:如果给定一个字母,它将循环,但是如果给定的是一个有效的数字,代码应该将其存储到cSec中。有没有办法做到这一点?
byte cSec;
boolean contCSec = true;
while(contCSec == true) {
System.out.println("Enter course section: ");
cSec = sc.nextByte();
if(cSec>0)
contCCode = false;
}
cSec不能在循环之外使用。
发布于 2019-06-04 05:02:08
你所写内容的一种不太冗长的形式可能是:
byte cSec;
do {
System.out.println("Enter course section: ");
cSec = sc.nextByte();
} while (cSec <= 0);
其中'cSec <= 0‘表示一个无效值,根据您的原始数据,尽管我认为还有更多需要验证的地方。
这与你的标题(在循环中初始化)不匹配,因为对我来说,这正是你不想做的。
我认为这比原来的更清楚,因为它不涉及标志值,并且do...while循环更好地显示了“询问然后决定循环”的性质。
添加更多验证:
byte cSec;
do {
System.out.println("Enter course section: ");
try {
cSec = sc.nextByte();
}
catch (InputMismatchException ex) {
System.out.println("A number is required");
cSec = -1;
}
} while (cSec <= 0);
发布于 2019-06-04 05:10:40
除了dave的另一个精彩答案之外,您还可以通过在循环外部初始化cSec
来抑制编译器警告。
byte cSec = 0;
boolean contCSec = true;
while(contCSec == true) {
System.out.println("Enter course section: ");
cSec = sc.nextByte();
if(cSec>0)
contCSec = false;
}
在没有第一个声明的情况下收到警告的原因是,听起来很奇怪,编译器不会分析while(contCSec == true)
中的布尔值的内容。它看到有一个while
循环,并且看到(contCSec == true)
将产生一个布尔值,但就编译器而言,任何进入while条件的布尔值都可能是真的,也可能是假的。这意味着您可以进入while循环,或者您可以...不。
就编译器而言,while循环中的任何事情都可能发生,也可能不会发生,如果不实际运行代码,就无法知道。(如果您想知道为什么这实际上是对计算机的严格限制,请查看halting problem。)这意味着编译器不知道cSec = sc.nextByte();
是否会发生。因此,就有了警告。
https://stackoverflow.com/questions/56434400
复制相似问题