提供非布尔的循环条件

时间:2017-08-16 08:51:29

标签: java loops boolean conditional java.util.scanner

我需要接受一些正整数,我使用for循环,如下所示:

Scanner in = new Scanner(System.in);
for(int i=0; i<n; i++) { 
    num = in.nextInt(); 
    //do something with num
}

这要求我(a)预先知道整数 n (b)使用计数器 i

我知道Java在循环条件下不接受非布尔表达式。但是如果没有 n i ,我怎么能这样做呢? 例如,像:

while( (num = in.nextInt()) ) {
   //do something with num
}

任何类型的循环(for / while / do-while)都可以。

4 个答案:

答案 0 :(得分:2)

你可以做的是:

boolean loop = true;
while (loop) {
  int num = in.nextInt();
  ... do something with n
  if (whatever) loop = false;
}
例如,

或者您将while (true)if (whatever) break一起使用。

换句话说:你需要一个布尔条件,但你可以在循环体中控制这个条件,如上所示。

答案 1 :(得分:1)

循环直到输入 - 或 - 非整数输入结束(例如&#34;退出&#34;,空行):

while(in.hasNextInt()) {
    int num = in.nextInt();
}

如果您在IntelliJ中进行测试并希望明确指出EOF:Ctrl+D or ⌘+D
如果您想将文件作为输入阅读:java MyClass < numbers.txt

答案 2 :(得分:0)

以下是有关如何使用扫描仪类的示例:https://www.tutorialspoint.com/java/util/scanner_nextint.htm

您应该使用hasNext()方法结束循环并使用hasNextInt()方法检查整数:

public class ScannerDemo {
   public static void main(String[] args) {
       String s = "Hello World! 3 + 3.0 = 6.0 true ";

       // create a new scanner with the specified String Object
       Scanner scanner = new Scanner(s);

       // find the next int token and print it
       // loop for the whole scanner
       while (scanner.hasNext()) {

           // if the next is a int, print found and the int
           if (scanner.hasNextInt()) {
               System.out.println("Found :" + scanner.nextInt());
           }

           // if no int is found, print "Not Found:" and the token
           System.out.println("Not Found :" + scanner.next());
       }

       // close the scanner
       scanner.close();
   }
}

答案 3 :(得分:0)

  

我知道Java在循环条件下不接受非布尔表达式。

据我所知,没有编程语言允许这样做。循环要么继续要么不要,这是一个布尔决策,需要一个布尔条件。没有&#34;循环可能继续,我们不知道&#34;。

据说Java - 当然 - 需要一个布尔条件才能继续。您需要回答的问题是:循环何时终止?

有三种选择:

循环永远持续

while (true) 

循环停在特殊输入值

while ((num = in.readInt()) != 0)

循环从外部打破

while (running) {
  // ...
}

public void stopLoop() { 
  running= false; 
}