在Java中从一组数字中找到平均值

3

这是我在编程作业中遇到的Java问题的第一次尝试。

我必须创建一个程序,计算用户输入的数字列表的平均值。当输入0时,数据输入应该终止。我的问题是“所有负数应该被忽略”。

由于某种原因,以下代码不起作用,当我输入负数时,它应该被忽略,但由于某种原因它终止了数据输入。

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 ("*************************************");

  }
}

大家有什么想法吗?

谢谢

4个回答

7
变量negativenumber始终具有零值。当您将numberentered设置为negativenumber时,“while”条件得以满足,循环退出。更好的策略是在输入负数时使用“continue”跳过其余的循环体。

非常感谢,我只学了几天,所以很困难。谢谢。 - Phil

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。你还将count声明为double。你很可能想将countnumberenterednumbersum声明为int类型。

1

你从未给negativenumber赋值为0以外的其他值(在初始化时),然后你这样做了

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

并且 do...while 循环终止,因为 numberentered 为0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接