2017-08-16 75 views
3

我必须接受,我用一个for循环一些正整数如下循环条件:提供不是布尔

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

这需要我(一)知道数量的整数n个事先( b)使用计数器i

我知道Java在循环条件下不接受非布尔表达式。但我怎样才能做到这一点没有ñ? 例如,是这样的:

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

在任何类型的循环(对于/同时/ DO-同时)就行了。

+4

你这是什么希望停止条件成立(即循环何时终止)? – Eran

+2

所有循环条件都是布尔值。要么你停下来,要么你不停止循环。 – Kayaman

+0

你可以使用in.nextLine()以字符串的形式读取一行,检查该字符串是否为'exit'或类似的内容,然后逐出你的循环,否则将该字符串解析为整数并继续处理你的数字。 –

回答

1

循环直到输入结束- 或 -非整数输入(例如,“退出”,空行):

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

如果你在测试的IntelliJ和希望,指示EOF明确:Ctrl+D or ⌘+D
如果你想读一个文件作为输入:java MyClass < numbers.txt

2

你可以做的是一样的东西:

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

例如。

或者您使用while (true)连同if (whatever) break。换句话说:你需要一个布尔条件,但你可以在你的循环体内使用控制,如上所示。

+0

这种方法的工作原理,但我想尽量减少LOC和变量的使用。您的解决方案需要跟踪布尔“循环”以及比较(即“如果”)。在具有多个循环的较大代码中,我要么必须使用相同的控制变量'loop'(这可以节省空间,但很难跟踪),或者使用多个变量。 – agentK

+0

在较大的代码中,您遵循干净的代码原则,例如“单层抽象”。你只是**从不**编写一个包含多个循环的方法。这很简单。换句话说:当你真的有兴趣编写好的,人类可读的**干净的**代码......那么你担心的不仅仅是简单的循环条件。 – GhostCat

+0

我明白你的观点。我将研究'单层抽象'原则。其实我习惯了C/C++,并想知道如何绕过Java的'int is boolean'功能(请参阅我对TwoThe的答案的评论)。谢谢! – agentK

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(); 
    } 
} 
0

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

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

用那个说的Java - 当然 - 需要一个布尔条件来继续与否。您需要回答的问题是:循环何时结束?

有三个选项:

循环永续

while (true) 

循环停在一个特殊的输入值

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

环路自外破

while (running) { 
    // ... 
} 

public void stopLoop() { 
    running= false; 
} 
+0

在C中,while((num = ...))'不会引发编译错误,并且会被解释为布尔类型。我认为这是OP所表示的非布尔值... – m13r

+0

这是因为在C'0'中被认为是'false'这与选项2完全相同。 – TwoThe

+0

是的,但'num'的类型为int '在这种情况下,对于Java“不是一个布尔值” – m13r