[英]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;
}
這些是我得到的結果:
有趣的是,如果我沒有while循環停止,然后再次輸入相同的數字列表(1 3 4 2 5 0),它將輸出3和2,這是我的數字列表中的偶數-以及所有這進一步困擾了我。
有任何想法嗎?
將所有塊包裝起來,包括如果將塊裝在花括號中!
這個:
if (foo)
doSomething();
doSomethingElse();
不能像您認為的那樣工作
if (foo) {
doSomething();
}
doSomethingElse();
而是將所有塊用大括號括起來,以便毫無疑問:
if (foo) {
doSomething();
doSomethingElse();
}
這看起來像是一項學習練習,所以我會給您一些提示,而不是直接告訴您。
在您選擇的IDE中,告訴它自動縮進您的代碼。 仔細查看if
語句及其結果的位置。
請仔細考慮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;
}
據我notZero
, notZero
的唯一目的是終止循環。 如果使用以循環條件終止的循環,則不需要它。 您也不需要在循環內打印“序列結束”,因為根據定義,它會在序列結束時打印。
如果我們直接測試條件,
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.