簡體   English   中英

Java中的While循環不起作用

[英]While-loop in Java not working

好了,所以問題是這樣的:

我想輸入一堆數字,一個隨機數,例如5個數字。 在該數字的末尾,我將添加第六個數字0,這將是循環結束的信號。

為此,我將要做。

我運行我的程序,這是我的輸入:

1 3 4 2 5 0

所以我要打印程序

1 3 4 2 5“序列結束”

這是我的代碼,據說可以做到這一點(所有這些都在main方法中):

Scanner input = new Scanner(System.in);
System.out.println("Alright, what?");
boolean notZero = true;
while (notZero)  
 {
   System.out.println(input.nextInt());
   if (input.nextInt() == 0)
       System.out.println("End of sequence");
       notZero = false;    
 }

這些是我得到的結果:

http://i.imgur.com/4Th43.jpg

有趣的是,如果我沒有while循環停止,然后再次輸入相同的數字列表(1 3 4 2 5 0),它將輸出3和2,這是我的數字列表中的偶數-以及所有這進一步困擾了我。

有任何想法嗎?

將所有塊包裝起來,包括如果將塊裝在花括號中!

這個:

if (foo) 
  doSomething();
  doSomethingElse();

不能像您認為的那樣工作

if (foo) {
  doSomething();
}

doSomethingElse();

而是將所有塊用大括號括起來,以便毫無疑問:

if (foo) {    
  doSomething();
  doSomethingElse();
}

這看起來像是一項學習練習,所以我會給您一些提示,而不是直接告訴您。

  1. 在您選擇的IDE中,告訴它自動縮進您的代碼。 仔細查看if語句及其結果的位置。

  2. 請仔細考慮nextInt()的功能,以及在何處以及多久調用一次。

您在循環中兩次調用input.nextInt(),僅打印其中之一。 實際上,這就像跳過輸入中的所有其他數字。 更改您的代碼以將下一個輸入存儲到變量中,然后檢查該變量。 我懷疑這不是您的實際代碼,因為沒有通過檢查條件將notZero設置為false ,它只會執行一次循環。 FWIW, notZero是一個糟糕的變量名。 它應該是語義的,而不是指示其期望值。 您還希望僅在輸入值不是輸入指示符的結尾時打印輸入值。

Scanner input = new Scanner(System.in);

System.out.println("Alright, what?");

boolean endOfInput = false;

while (!endOfInput) {
   int next = input.nextInt();

   if (next == 0) {
      System.out.println("End of sequence");
      endOfInput = true;
   }  
   else {
      System.out.println(next);
   } 
}

您的問題在這里:

 if (input.nextInt() == 0)

當您調用nextInt()兩次時,它將刪除兩個數字。 您只需要在每個迭代中調用一次即可。

 while (notZero)  
 {
    int num = input.nextInt();
    System.out.println(num);

    if (num == 0) {
        System.out.println("End of sequence");
        notZero = false;    
    }

  }

解決此問題以及氣墊船充滿鰻魚指出的問題,你應該很好。

您在整個循環中每次都要調用nextInt()兩次。 這意味着您每次都會消耗兩個數字,每個數字都會做不同的事情-即,打印的數字和與0比較的數字是兩個不同的數字。 您只需要調用一次nextInt()並將結果存儲在變量中, 然后對其進行操作。

除了循環中的兩次讀取外,我假設您還想在if語句后添加一個塊

if (input.nextInt() == 0) {
    System.out.println("End of sequence");
    notZero = false;    
}

據我notZeronotZero的唯一目的是終止循環。 如果使用以循環條件終止的循環,則不需要它。 您也不需要在循環內打印“序列結束”,因為根據定義,它會在序列結束時打印。

如果我們直接測試條件,

int n;
while ((n = input.nextInt()) != 0)
{
    System.out.println(n);
}
System.out.println("End of sequence");

您也可以說for (int n = input.nextInt(); n != 0; n = input.nextInt())而不是while 它確保n僅在循環中可見,但這也意味着重復自己-並可能使某人稍后使兩個“初始化”和“增量”部分不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM