2017-08-16 39 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

相關問題