首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在循环内初始化变量

如何在循环内初始化变量
EN

Stack Overflow用户
提问于 2019-06-04 04:52:15
回答 2查看 60关注 0票数 -1

我的代码应该保持循环,直到给定一个有效的输入,即:如果给定一个字母,它将循环,但是如果给定的是一个有效的数字,代码应该将其存储到cSec中。有没有办法做到这一点?

代码语言:javascript
复制
    byte cSec;
    boolean contCSec = true;
    while(contCSec == true) {
        System.out.println("Enter course section: ");
            cSec = sc.nextByte();
        if(cSec>0)
            contCCode = false;
    }

cSec不能在循环之外使用。

EN

回答 2

Stack Overflow用户

发布于 2019-06-04 05:02:08

你所写内容的一种不太冗长的形式可能是:

代码语言:javascript
复制
byte cSec; 
do {
   System.out.println("Enter course section: ");
   cSec = sc.nextByte();
 } while (cSec <= 0);

其中'cSec <= 0‘表示一个无效值,根据您的原始数据,尽管我认为还有更多需要验证的地方。

这与你的标题(在循环中初始化)不匹配,因为对我来说,这正是你不想做的。

我认为这比原来的更清楚,因为它不涉及标志值,并且do...while循环更好地显示了“询问然后决定循环”的性质。

添加更多验证:

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2019-06-04 05:10:40

除了dave的另一个精彩答案之外,您还可以通过在循环外部初始化cSec来抑制编译器警告。

代码语言:javascript
复制
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();是否会发生。因此,就有了警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56434400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档