2013-11-09 11 views
-1

只要用戶輸入的數字大於以前的數字,我想從java讀取用戶的所有數字。但我可以只寫正數。如果包含所有數字,我如何修復下面的代碼。如果可能的話,請爲初學者編寫解決方案,因爲它是我大學計算機科學的第一年,而且我還沒學到很多東西。如何修復遞增的訂單求和碼?

import acm.program.*; 

public class IncreasingOrder extends ConsoleProgram { 

public void run() { 

    int previousNumber = 0; 

    int total = 0; 

    int count = 0; 

    while(true) { 
     int n = readInt("Enter > "); 
     if (n <= previousNumber) break; 

     total += n; 
     count++; 
     previousNumber = n; 
    } 
    println("You have entered " + count + " numbers in increasing order."); 
    println("Sum of these " + count + " numbers is " + total + ".");   
} 

}

+0

當處理負數時,您將在第一次迭代中將負數與'previousNumber'的值'0'進行比較,從而導致循環中斷。您必須用整數可以得到的最小值初始化'previousNumber',即'Integer.MIN_VALUE' –

回答

0

您採寫:

int previousNumber = 0; 

你之所以不能輸入負數是因爲該程序假定第一個值,不包括在計算中,爲0:如果你在任何類型程序退出。

有兩種方法可以解決這個問題。您可以爲設置較小的初始值,以便允許使用一些負數。例如,如果將其設置爲-1000,則用戶可以輸入-999或更大的值。你應該使用什麼樣的價值?那麼,我們知道所有的int值都大於或等於Integer.MIN_VALUE,所以你可以使用它。

但是,然後用戶恰好輸入-2147483648,它被拒絕。爲什麼?因爲它恰好是Integer.MIN_VALUE。所以這不是一個好的解決方案。

用戶輸入的第一個數字需要特殊處理,因爲它不能與之前的輸入進行比較。一種解決方案因此被單獨地讀取所述第一數目,則循環的外面:

int previousNumber = readInt("Enter > "); 

int total = previousNumber; 

int count = 1; 

while(true) { 
    int n = readInt("Enter > "); 
    if (n <= previousNumber) break; 

    total += n; 
    count++; 
    previousNumber = n; 
} 

另一種解決方案是維持一個標誌變量,告訴您如果用戶已經給出了第一輸入與否:

boolean isFirst = true; 
while(true) { 
    int n = readInt("Enter > "); 
    if (!isFirst && n <= previousNumber) break; 

    total += n; 
    count++; 
    previousNumber = n; 
    isFirst = false; 
} 

你應該使用哪種風格取決於你的口味。

2

使用Integer.MIN_VALUE,而不是0爲初始化。 然後應該爲負數工作。

+1

如果輸入Integer.MIN_VALUE作爲第一個值,該怎麼辦?程序將會退出。 – hasan83

+1

你有權利,你需要添加'first'標誌。 – Areo

0

當然,你不打算與第一個數字。所以設置一個布爾值來存儲狀態。並且在輸入第二個數字之前不檢查該數字是否更大。祝ACM好運。

import acm.program.*; 

public class IncreasingOrder extends ConsoleProgram { 

public void run() { 

    int previousNumber = 0; 

    int total = 0; 

    int count = 0; 
    boolean first = true; 
    while(true) { 
     int n = readInt("Enter > "); 
     if (!first && n <= previousNumber) break; 
     first = false; 
     total += n; 
     count++; 
     previousNumber = n; 
    } 
    println("You have entered " + count + " numbers in increasing order."); 
    println("Sum of these " + count + " numbers is " + total + ".");   
} 
} 
+0

&&不||。固定。 – hasan83