2011-03-19 112 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