2013-10-14 41 views
1

基本上我試圖編寫一個程序,它將從用戶讀取一組有限的值,然後打印平均值。 (我知道如何做計算,所以我會離開這些。)Inifnite loop while reading numbers

我遇到了循環的邏輯端的問題。

我明白,這裏的每個人都會更喜歡我嘗試過但我是新來的循環,我很難理解循環邏輯。

我正在嘗試爲我的班級做這個任務,但老師正在通過材料飛行,並且在提問時根本沒有幫助。當我向一個問題尋求幫助時,他說盡力而爲,我會相應地對它進行評分?

老實說,我不知道從哪裏開始。

import java.util.Scanner; 

public class P4Point5 { 
public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    String Status = ""; 
    int count = 0; 

    while (in.hasNext()) { 
     count++; 
}   

    for (int i = 0; i < count; i++) { 
//Do calculations here? 
    } 
} 
} 
+0

當我嘗試其他方法來從中做出一個無限循環的用戶得到的值。 – NewToJava

+0

我認爲它會從keuboard讀取一個數字,但永遠不會到達for循環。 – Cold

+0

我的問題是沒有讀取數字。我只是不知道如何結束循環,以便它可以用數字來在任另一個循環,或只是一個方法執行計算來計算平均值等 – NewToJava

回答

5

你永遠不會得到下一個元素:

while (in.hasNext()) 
    count++; 

你永遠是1 ST元素,並詢問是否有2 第二元素。

你應該使用:

while (in.hasNext()) 
    int next = sc.nextInt(); 

BTW:請避免聲明沒有大括號。它是萬惡的根源。

+0

我之後的括號內實現。我知道把它們排除在外並不是一個好習慣。 線 整數下一= sc.nextInt(); 這將只讀取一個數字,並將其設置爲下一個,對不對? – NewToJava

+0

@NewToJava閱讀文檔,你會更好地理解它的功能。 – Maroun

+0

@NewToJava是的,如javadoc中所示http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html#nextInt()'將輸入的下一個標記掃描爲int 。' –

3

當你閱讀的第一次,你不讀了,所以hasNext()會留下永遠true因爲總是會有下一個元素,這是..你正在閱讀的當前元素。

一種解決辦法是做這樣的事情:

String input = null; 
while((input = in.next()) != null) { 
    //... 
} 
0

你可以試試這個:

while (in.nextInt() != 'SOME INT TO STOP LOOP') 
     count++; 

相反的驗證每個時間,如果我們有一個輸入的數字,我們可以驗證所輸入的數字是一個停止條件。

+0

如果它應該採取任何值,不會使一個int來停止循環強制某個整數不被允許? – NewToJava

+0

好問題。你可以使用一個負數,或者,更好的是,你可以使用'next()'並且轉換給定的字符串,如果它是一個你計數的數字,如果沒有,你退出循環。 – Cold

+0

請看這裏[http://stackoverflow.com/questions/5439529/determine-if-a-string-is-an-integer-in-java],驗證如果是一個整數的好例子。 – Cold