【问题标题】:Finding the Average from a list of numbers in Java从Java中的数字列表中查找平均值
【发布时间】:2011-03-19 15:27:13
【问题描述】:

这是我第一次尝试解决 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 ("*************************************");

  }
}

有什么想法吗?

谢谢

【问题讨论】:

    标签: java loops while-loop average


    【解决方案1】:

    变量negativenumber 的值始终为零。当您将 numberentered 设置为 negativenumber 时,“while”条件得到满足,循环退出。更好的策略是让我们“继续”在输入负数时跳过循环体的其余部分。

    【讨论】:

    • 非常感谢,才学了几天,真的很吃力。谢谢
    【解决方案2】:

    如果您想忽略负数,请不要将其包含在计算中。而是执行以下操作:

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

    【讨论】:

      【解决方案3】:

      检查以下代码块:

      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

      【讨论】:

        【解决方案4】:

        您永远不会为 negativenumber 分配除 0 以外的值(在初始化时),那么您就这样做

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

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

        【讨论】:

          最近更新 更多