Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复从用户输入获取平均值的问题_Java - Fatal编程技术网

Java 如何修复从用户输入获取平均值的问题

Java 如何修复从用户输入获取平均值的问题,java,Java,说明如下: 编写一个名为InputHenPrintSumandAverage的方法,该方法没有任何参数 该方法不应返回任何内容(void),并且需要保持从键盘读取整数 当用户输入非整数的内容时,需要以“SUM=XX AVG=YY”格式打印消息。XX表示所有输入的int型数字之和。 YY表示所有long类型数的计算平均值 我已经编写了以下方法,但我一直得到不正确的平均值。我可以改变什么来获得正确的平均值 public static void inputThenPrintSumAndAverag

说明如下:

  • 编写一个名为InputHenPrintSumandAverage的方法,该方法没有任何参数
  • 该方法不应返回任何内容(void),并且需要保持从键盘读取整数
  • 当用户输入非整数的内容时,需要以“SUM=XX AVG=YY”格式打印消息。XX表示所有输入的int型数字之和。 YY表示所有long类型数的计算平均值
我已经编写了以下方法,但我一直得到不正确的平均值。我可以改变什么来获得正确的平均值

public static void inputThenPrintSumAndAverage(){
        Scanner scanner = new Scanner(System.in);
        int sum = 0, counter = 0;
        long average = 0L;
        while(true)        {

            boolean number = scanner.hasNextInt();
            if(!number)
            {
                counter++;
                break;
            }
            else {
                int digit = scanner.nextInt();
                sum += digit;
                counter++;
            }
        }
        average = sum / counter;
        System.out.println("SUM = " + sum + " AVG = " + average);
    }

应采取以下措施:

        if(!number)
            break;
你的平均值是错误的,因为你增加的“计数器”比你应该增加的多

当然,最后您必须再添加一条
if
语句,以确保如果计数器为零,您不会试图除以
计数器。在这种情况下,平均值是未定义的


此外,正如其他人在评论中指出的那样,我们完全不清楚你说“我一直得到不正确的平均数”是什么意思,我们通常对措辞如此含糊的问题表示不满。但是,如果您的“正确平均值”是指带小数的平均值,那么您应该使用
double
而不是
long
作为平均值,并且您应该在除法之前将
计数器
转换为
double
,为了强制执行双除法而不是长除法。

使用
scanner.hasnetint()
读取util,提供了一个非整数值作为输入:

public static void inputThenPrintSumAndAverage() {
  Scanner scanner = new Scanner(System.in);
  int number, sum = 0, counter = 0;
  long average = 0L;
  while (scanner.hasNextInt()) {
     number = scanner.nextInt();
     sum += number;
     counter++;
  }
  if(counter != 0){
     average = sum / counter;
  }
  System.out.println("SUM = " + sum + " AVG = " + average);
}
请注意,您应该检查
计数器的值以避免被零除。

如果希望平均值为小数,请将
average
的类型更改为double:
double average并将除法转换为双精度:
平均值=(双精度)和/计数器

你说的“不正确的平均值”是什么意思,你能举个例子吗?你的意思是它不是一个十进制数而是一个整数(因为你在做整数除法)?还有:你确定你应该做
counter++如果用户没有输入数字,您将在该块中处理?如果您正在扫描整数,您如何知道用户是否输入了长字符?是否需要点值?只需将求和或计数器转换为
浮点
双精度
,在用户未输入数字的if块中是否需要计数器?您好,很抱歉,内容含糊不清。我是新手!让我解释一下:如果用户输入1 2 3 4 5 a,那么该方法应该返回15的和和和3的平均值,但我得到的平均值是2。每次我得到的正确答案平均少一个。对不起,我是新手!让我解释一下:如果用户输入1 2 3 4 5 a,那么该方法应该返回15的和和和3的平均值,但我得到的平均值是2。每次我得到的正确答案平均少一个。