我的Java教科书中的一个问题是要我创建“ Average程序的新版本(清单3.6),当用户立即输入前哨值(不输入任何有效值)时,可以防止运行时错误。”

清单3.6如下:

import java.text.DecimalFormat;
import java.util.Scanner;

public class Average
{
public static void main (String[] args)
{
    Scanner scan = new Scanner (System.in);
    int sum = 0, value, count = 0;
    double average;

    System.out.println ("Enter an integer (0 to quit): ");
    value = scan.nextInt();


    while (value != 0) // sentinel value of 0 to terminate the loop
    {
        count++;
        sum += value;
        System.out.println ("The sum far is " + sum);

        System.out.print ("Enter an integer (0 to quit): ");
        value = scan.nextInt();
    }

    System.out.println ();
    System.out.println ("Number of values entered: " + count);

    average = (double)sum / count;

    DecimalFormat fmt = new DecimalFormat ("0.###");

System.out.println ("The average is " + fmt.format(average));


}
}


我认为问题是要使哨兵值0进行计数。当您输入哨兵值时,这是清单3.6的输出。

输出:

Enter an integer (0 to quit):
0

Number of values entered: 0
The average is �


另外,我认为应该说Number of values entered: 0而不是说Number of values entered: 1。如果您认为自己知道问题的所在,请告诉我。提前非常感谢您。

最佳答案

您需要保护以确保count不等于零。

average = (double)sum / (count == 0 ? 1 : count);

07-26 02:30