【问题标题】:Java: How to infinitely enter numbers, stop when negative number is entered and computer the averageJava:如何无限输入数字,输入负数时停止并计算平均值
【发布时间】:2015-09-02 06:22:43
【问题描述】:

我正在尝试编写一个 Java 程序,它接收可能无限数量的值 - 一旦用户输入负数,程序就会停止,计算所有输入数字的平均值(不包括负数)和打印出输入了多少数字(再一次,不是负数)以及平均值。

以下是我目前拥有的代码。当我尝试运行程序时,它无法正确计算平均值,您必须输入几个连续的负数才能最终停止程序。

为了测试算术和程序的其余部分,我插入了一条语句,如果输入“负数”而不是负数,该语句将关闭程序。何时执行此操作,平均值和计数以及其他所有内容都按原样工作。本质上,当我尝试在负数后停止程序时,问题就开始出现了。

我是一名初级程序员,这让我发疯了几个小时。任何帮助是极大的赞赏!

import java.util.*;
import java.lang.Math;
import java.io.IOException;
import java.io.InputStream;

public class Average
{
    public static void main(String[] args)
    {   
        Scanner numInput = new Scanner(System.in);

        double avg = 0.0;
        double count = 0.0;
        double sum = 0.0;

        System.out.println("Enter a series of numbers. Enter a negative number to quit.");

        while (numInput.hasNextDouble())
        {
            double negNum = numInput.nextDouble();
            if (negNum >= 0)
            {
                sum += numInput.nextDouble();
                count++;
                avg = sum/count;
            }
            else 
            {
                System.out.println("You entered " + count + " numbers averaging " + avg + ".");
                break;
            }
        }
    }
}

【问题讨论】:

  • 你在里面调用了 nextDouble 两次。您应该将 negNum 添加到 sum。

标签: java input average


【解决方案1】:

您应该使用:sum+=negNum; 而不是 sum += numInput.nextDouble();

就像现在一样,您的程序读取一个数字,如果它不是负数,它会读取另一个数字并将其添加到sum

此外,您应该在 else 块中只计算一次平均值。

【讨论】:

    【解决方案2】:

    您正在读取一个新数字来计算sum

    应该是

    sum += negNum;
    

    【讨论】:

      【解决方案3】:

      您已经收到了用户在线输入的号码:

      double negNum = numInput.nextDouble();
      

      您应该将此号码本身添加到sum,而不是再次致电numInput.nextDouble() 向用户询问另一个号码。所以固定的代码是:

      public static void main(String[] args){
              Scanner numInput = new Scanner(System.in);
      
              double avg = 0.0;
              double count = 0.0;
              double sum = 0.0;
      
              System.out.println("Enter a series of numbers. Enter a negative number to quit.");
      
              while (numInput.hasNextDouble())
              {
                  double negNum = numInput.nextDouble();
                  if (negNum >= 0)
                  {
                      sum += negNum;
                      count++;
                      avg = sum/count;
                  }
                  else
                  {
                      System.out.println("You entered " + count + " numbers averaging " + avg + ".");
                      break;
                  }
              }
          }
      

      示例运行:

      Enter a series of numbers. Enter a negative number to quit. 2 3 -1 You entered 2.0 numbers averaging 2.5.

      【讨论】:

        【解决方案4】:

        改变

        sum += numInput.nextDouble(); // reading next value again
        

        sum += negNum;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多