如何在循环中初始化变量

时间:2019-06-03 20:52:14

标签: java if-statement while-loop println

我的代码应该一直循环,直到给出有效的输入为止,即:如果给出一个字母,它将循环,但是如果给出一个有效的数字,则代码应将其存储到cSec中。反正有这样做吗?

const vector

cSec不能在循环外使用。

2 个答案:

答案 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();是否会发生。因此,警告。