2011-03-19 113 views
3

這是我第一次嘗試java問題,這是我的程序設計任務的一部分。從Java中的數字列表中查找平均值

我必須編寫一個程序來計算用戶輸入的數字列表的平均值。當輸入0時,數據實體應該被終止。我的問題是這個「ALL負數應該被忽略」

由於某種原因,下面的代碼無法正常工作,當我輸入一個負數應該忽略它,但不知什麼原因終止數據enty

import java.util.*; 

class Task_8 
    { 
public static void main() 
    { 

    Scanner inputLine = new Scanner(System.in); 

    float row, numberentered, numbersum = 0, negativenumber = 0; 
    double result, count = 0; 


    System.out.println ("Welcome to Task 8 of 10 of my Programming Assignment... Nearly There!"); 
    System.out.println ("_____________________________________________________________________"); 
    System.out.println(); 
    System.out.println ("Enter as many numbers as you like and this program will tell you the arithmatic mean"); 
    System.out.println ("Terminate data entry by entering 0"); 


    do{ 

     System.out.print ("Please enter a number: "); 
     numberentered = inputLine.nextInt(); 

     count++; 

     if (numberentered < 0) 
     { 
      numberentered = negativenumber; 
     } 

     numbersum = (numberentered + numbersum) - negativenumber; 

    } 

    while (numberentered !=0); 

    result = numbersum/count; 
    System.out.println(); 
    System.out.println ("*************************************"); 
    System.out.println(); 
    System.out.println ("The sum of all of the numbers you entered is " +numbersum); 
    System.out.println ("You entered " + count + " numbers"); 
    System.out.println ("The Average/mean of the numbers that you entered is " + result); 


    System.out.println(); 
    System.out.println ("*************************************"); 

    } 
} 

任何想法傢伙?

謝謝

回答

7

變量negativenumber始終具有零值。當您設置numberentered負號符合「while」條件,循環退出。更好的策略是當輸入負數時,我們「繼續」跳過循環體的其餘部分。

+0

非常感謝,只有這麼幾天才學會這麼掙扎。謝謝 – Phil 2011-03-19 15:43:31

1

你永遠不分配比0(初始化中)到negativenumber,那麼你做

if (numberentered < 0) 
{ 
    numberentered = negativenumber; 
} 

以外的值和做... while循環終止,因爲numberentered爲0。

5

如果您想忽略負數,那麼請不要將其包含在您的計算中。相反,這樣做:

if (numberentered > 0) 
{ 
    numbersum += numberentered; 
} 
2

檢查下面的代碼塊:

if (numberentered < 0) 
{ 
    numberentered = negativenumber; 
} 

這是什麼東西做的是設置numberentered爲0。然後,在你結束do-while循環,你有這樣的:

while(numberentered != 0); 

因此,無論用戶輸入負數,您都將numberentered設置爲零。當你到達循環結尾時,numberentered != 0是錯誤的,所以循環結束。

更簡單的解決方案,更類似於將來您將學會做的事情,就是簡單地檢查if語句中數字的值,然後根據它的值添加或不添加。

if(numberentered > 0) 
    numbersum += numberentered; 

這是乾淨,簡潔,並消除了對negativenumber變量,它是多餘的,可能會造成混亂的需要。如果您從現在起一年後查看此代碼,您是否還記得negativenumber的意思,或者它爲什麼設置爲零?編寫你的代碼,就好像其他人必須閱讀並理解它一樣。你的教授將會,而且將來你的同事也會這樣做。

另一方面,您正在整數閱讀(與inputLine.nextInt()),但將它們存儲在float。您還宣佈countdouble。您很可能會將count,numberenterednumbersum聲明爲int