2017-04-11 84 views
2

我正在寫一個程序,該程序應該在正整數(包括0)列表中讀取。如果用戶輸入超過100個數字或輸入負數,則循環應該終止。輸入負數後循環不終止

我試着做一個簡單的do-while循環來解決這個需求,但是在運行時,無論我提供什麼數字,循環都不會終止。我已經嘗試了幾次改變循環,到目前爲止還沒有成功。我肯定犯了一個非常微妙的新秀錯誤,但我似乎無法理解。

int[] list = new int[100]; 
    int size=0; 
    do{ 
     list[size] = kbd.nextInt(); 
     size++; 
    }while((size < 100) && (list[size] >= 0)); 


} 
+8

當然不是。你只增加了'size',所以'list'中下一個元素的值是'0'。 – Andreas

回答

6

你的問題是在測試list[size] >= 0之前你增加了size。您應該將其更改爲

do{ 
    list[size] = kbd.nextInt(); 
    size++; 
}while((size < 100) && (list[size-1] >= 0)); 
+0

它的工作!非常感謝! – s24569

+2

@ s24569如果您對答案感到滿意,請考慮在15分鐘等待期過後,點擊答案下方的綠色分格標記,接受答案。 – JackVanier

1

爲什麼不使用for循環來做你想做的事?在我看來,for-loops在使用數組時非常容易使用。這裏是一個例子,如何使用這樣的for循環來解決你的問題:

int[] list = new int[100]; 
int tmp; 

//This loop will run 100 times because your list.length() is 100 
for(int i = 0; i < list.length(); i++) { 
    tmp = kbd.nextInt(); //Saving user input temporary 

    if(tmp < 0) //Exit loop when input is negative 
     break; 
    else //Add input to list 
     list[i] = tmp; 
} 
+1

我剛剛開始編程,但教練很清楚,如果我們在if條件中使用break語句,他會立即刪除點。如果他沒有在我們的頭上徘徊壞品位的威脅,我會完成你所做的事情。 – s24569

+0

好的。但我不明白爲什麼你的老師會這樣做。這沒有意義。我的意思是限制軟件開發人員只使用一種解決方案是愚蠢的。特別是如果你限制他不使用最好的解決方案之一...... – Max