1

我正在编写一个程序来读取用户输入的一系列正整数。用户一次只能输入一个整数。然后它将计算这些整数的平均值。当用户输入0时程序将结束。(0不计入平均值)。程序将在程序结束时打印出平均值。

问题:当我进入 while 循环时,我的代码停止工作,因此它不计算用户的输入,因此什么也不打印。为什么我的 while 循环不计算用户输入的平均值?感谢您的指导:)

import java.util.Scanner;

public class AverageOfIntegers {

    public static void main(String[] args) {

        int integer;
        double sum;
        sum = 0;
        double average;
        Scanner input = new Scanner(System.in);
        int count; count = 0; 
        average = 0;


        System.out.println("Please enter an integer: ");

        integer = input.nextInt();


        while (integer != 0) {
        count = count + 1;  

            sum = sum + integer; 

            average = sum / count;

        }

        System.out.println("Average = " + average);

    }

}
4

5 回答 5

4

这是因为您实际上从未对超过一个整数求和。用户只输入一个数字。结果,您的循环基本上只作用于一个数字。您需要将输入放在 while 循环中并保存运行总和并在那里计数。更像这样的东西

while (integer != 0) {
    count += 1;  

        sum += integer; 

        average = sum / count;
        integer = input.nextInt();
    }
于 2013-11-01T13:42:46.097 回答
1

解释

首先,在定义数据类型时,可以在定义中设置它们的默认值。前任:

double sum = 0;

对比

double sum;
sum = 0;

其次,sum = sum + integer;是一样的:sum += integer;

第三,count = count + 1;与:count += 1或(更好)相同,count++;

至于您的实际算法,有一个问题和一个建议:

  1. 您不会integer在每次循环后更改 ' 值。因此,您可以在 while 条件中执行此操作:while ((integer = input.nextInt()) != 0) {或者在每个循环结束时:

    while (integer != 0) {
        count ++; 
        sum += integer;
        average = sum / count;
        integer = input.nextInt();
    }
    
  2. 这是对技术上更好的代码的建议(在我看来),但它看起来更好,更直观,并且需要更少的计算来计算while 循环完成的平均值而不是期间。这样,您只需在需要的地方计算一次,而不是在不需要的每个循环中计算一次。

_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ __ _ __ _ __ _ _ ____

守则(完整课程)

public class AverageOfIntegers {
    public static void main(String[] args) {
        int integer;
        double sum = 0;
        double average = 0;
        Scanner input = new Scanner(System.in);
        int count = 0;

        System.out.println("Please enter an integer: ");

        // set integer = to the nextInt() while looping so it calculates properly
        while ((integer = input.nextInt()) != 0) {
            count ++; 
            sum += integer;
        }
        average = sum / count; // calculate the average after the while-loop

        System.out.println("Average = " + average);
    }
}

_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ __ _ __ _ __ _ _ ____

示例输入/输出:

请输入一个整数:

5

10

15

0

平均值 = 10.0

所以它做了 5 + 10 + 15 = 30(这是总和),然后平均值是 30 / 3(30 是总和,3 是计数),这给了你Average = 10.0.

于 2013-11-01T13:52:43.733 回答
0

您需要integer = input.nextInt();在循环内移动,因此您的程序将在循环中收集输入。查看更正版本:

import java.util.Scanner;

public class AverageOfIntegers {

    public static void main(String[] args) {

        int integer = 0, count = 0; 
        double sum = 0.0, average = 0.0; 
        Scanner input = new Scanner(System.in);

        System.out.println("Please enter an integer: ");
        integer = input.nextInt();

        while (integer != 0) {
            count = count + 1;  
            sum = sum + integer; 
            System.out.println("Please enter an integer: ");
            integer = input.nextInt();
        }

        average = sum / count;
        System.out.println("Average = " + average);
    }
}
于 2013-11-01T13:42:27.367 回答
0

在循环:

while (integer != 0) {
    count = count + 1;  

    sum = sum + integer; 

    average = sum / count;
}

这只会在integer为 0 时停止,但这个变量在循环中不会改变,所以如果它不是一开始就永远不会为 0。

根据你说你想做的,你可能应该integer = input.nextInt();在你的循环内重复调用,像这样:

System.out.println("Please enter an integer: ");
integer = input.nextInt();

while (integer != 0) {

    count = count + 1;  
    sum = sum + integer; 

    System.out.println("Please enter an integer: ");
    integer = input.nextInt();
}

average = sum / count;

另外,正如其他人所说,您只需要average在循环后计算一次,所以我也移动了它。

于 2013-11-01T13:43:33.250 回答
0

问题是 input.nextInt() 应该是循环的一部分。按照您编写的方式,只要第一个输入非零,代码就会进入无限循环。相反,请执行以下操作:

while ((integer = input.nextInt())  != 0) {
  count = count + 1;  
  sum = sum + integer; 
  average = sum / count;
}
于 2013-11-01T13:45:19.240 回答