为什么我的“While Loop”不打印查找平均“得分”的计算?

时间:2013-11-01 13:39:00

标签: java loops while-loop

我正在编写一个程序,它读取用户输入的正整数序列。用户一次只能输入一个整数。然后它将计算这些整数的平均值。当用户输入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);

    }

}

5 个答案:

答案 0 :(得分:4)

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

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

        sum += integer; 

        average = sum / count;
        integer = input.nextInt();
    }

答案 1 :(得分:1)

解释

首先,在定义数据类型时,可以在定义中设置其默认值。例如:

double sum = 0;

vs

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循环期间这样,您只需要在需要时计算一次,而不是每个循环,这是不需要的。

  3. <强> _ __ _ __ _ __ _ __ _ 的__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ < / EM> __ _ __ _ __ _ __ _ ____

    守则(完整班级)

    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);
        }
    }
    

    <强> _ __ _ __ _ __ _ __ _ 的__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ < / EM> __ _ __ _ __ _ __ _ ____

    输入/输出示例:

      

    请输入一个整数:

         

    5

         

    10

         

    15

         

    0

         

    平均值= 10.0

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

答案 2 :(得分: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);
    }
}

答案 3 :(得分: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一次,所以我也移动了它。

答案 4 :(得分:0)

问题是input.nextInt()应该是循环的一部分。你编写它的方式,只要第一个输入非零,代码就会进入无限循环。相反,做:

while ((integer = input.nextInt())  != 0) {
  count = count + 1;  
  sum = sum + integer; 
  average = sum / count;
}