我的代码应该一直循环,直到给出有效的输入为止,即:如果给出一个字母,它将循环,但是如果给出一个有效的数字,则代码应将其存储到cSec中。反正有这样做吗?
const vector
cSec不能在循环外使用。
答案 0 :(得分:0)
您写的内容可能不太冗长:
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);
答案 1 :(得分:0)
除了another-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();
是否会发生。因此,警告。