Java 提供非布尔的循环条件

Java 提供非布尔的循环条件,java,loops,boolean,conditional,java.util.scanner,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 } 任何类型的循环(for/while/do-while)都可以。您可以执行以下操作: while( (num = in.nextInt()) ) { //do something with num }

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

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

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

您可以执行以下操作:

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

或者将
while(true)
if(无论什么)break一起使用


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

下面是一个如何使用scanner类的示例:

您应该使用
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();
   }
}
我知道Java不接受循环条件中的非布尔表达式

据我所知,任何编程语言都不允许这样做。循环要么继续,要么不继续,这是一个布尔决定,需要一个布尔条件。没有“循环可能继续,我们不知道”

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

有三种选择:

循环将永远持续下去

while (true) 
循环在特殊输入值处停止

while ((num = in.readInt()) != 0)
while (running) {
  // ...
}

public void stopLoop() { 
  running= false; 
}
环路从外部断开

while ((num = in.readInt()) != 0)
while (running) {
  // ...
}

public void stopLoop() { 
  running= false; 
}
循环直到输入或非整数输入结束(例如“退出”,空行):

如果您在IntelliJ中进行测试,并希望显式指示EOF:
Ctrl+D或⌘+D


如果要读取一个文件作为输入:
java MyClass

您希望停止条件是什么(即循环何时终止)?所有循环条件都是布尔值。您可以停止循环,也可以不停止循环。您可以使用in.nextLine()将一行读取为字符串,检查该字符串是否为“exit”或类似的内容,然后退出循环,否则将该字符串解析为整数并继续处理您的数字。希望这对您有所帮助@NoEm-如果您只对int感兴趣,那么使用in.hasNextInt()作为条件会在任何非整数输入时自动终止。请参阅我的答案:)在C
中,((num=…)
不会抛出编译错误,并且会被解释为布尔值。我认为这就是OP所说的非布尔值……这是因为在C中
0
被认为是
false
这与选项2完全相同。是的,但是
num
在这种情况下是
int
类型,对于java来说是“非布尔值”@two,恐怕我没有很好地理解我的观点。我想简化我的代码。正如m13r所说,C允许while(num=in.nextInt()),但Java不允许,因为“int”在Java中不是“boolean”。hasNextInt()解决了这个问题。在
系统上扫描仪的
hasNextInt()在哪一点上执行。在
中返回false?此方法有效,但我希望最小化LOC和变量的使用。您的解决方案需要跟踪布尔“循环”和比较(即“if”)。在具有多个循环的大型代码中,我要么使用相同的控制变量“loop”(这可以节省空间,但很难跟踪),要么使用多个变量。在大型代码中。。。您遵循干净的代码原则,例如“单层抽象”。您永远不会编写包含多个循环的方法。就这么简单。换句话说:当你真的对编写漂亮的、人类可读的干净代码感兴趣时。。。然后你担心的不仅仅是简单的循环条件,我明白你的意思。我将研究“单层抽象”原则。事实上,我已经习惯了C/C++并想知道如何绕过Java的“int不是布尔值”特性(参见我对TwoThe答案的评论)。谢谢@不客气。但请理解,这不仅仅是一个原则。当你认真对待这件事时,给自己买一本罗伯特·马丁的《干净的代码》。并且愿意花很多时间思考这个话题。这需要好几个月的练习才能完全理解,我注意到你只能接受到目前为止。让你也可以投票-这样你就可以对所有你认为有用的帖子表示感谢。