有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

循环java测试分数统计

这就是任务:

  • 显示使用信息“请输入0-100之间的测试分数
  • 输入999以完成。"
  • 接受0-100范围内的测试分数。如果数字超出范围,则显示消息“无效测试分数”,忽略该输入并继续收集值
  • 当用户输入数字999时,停止收集测试分数
  • 输入所有值后,显示输入的分数数、最低分数、最高分数和平均值

输入的示例输出:57 -2 98 13 85 77 999

这是我的解决方案:

import java.util.Scanner;

public class TestScoreStatistics {
    public static void main(String[] args)
    {
        int max=0;
        int min=999;
        int avg=0;
        int count=0;
        int sum=0;
        int num;
        Scanner scan=new Scanner(System.in);
        System.out.println("Please input test scores with values between 0-100.\nEnter 999 to finish.");
        num=scan.nextInt();
        int temp=num;

        do
        {
            if(num==999) 
                System.exit(0);

            if(num>=0 && num<=100)
            {
                count++;
                sum+=num;
                if(num>max ) 
                    max=num;
                if(num<min)
                    min=num;
            }
        } while((num=scan.nextInt())!=999);

        System.out.println("Test Statistics:");
        System.out.println("Number of tests: "+count);
        System.out.println("Lowest: "+min);
        System.out.println("Highest: "+max);;
        System.out.printf("Average: " + sum/count);
    }
}

但当输入为999时,输出应为 测试统计: 测试次数:0 最低:0 最高:0 平均:0 我该怎么做


共 (2) 个答案

  1. # 1 楼答案

    这就是我要做的。如果是作为编程类的辅助,我建议用集合等代码替换行(您可以在stackoverflow上找到)

        List<Integer> scores = new ArrayList<>();
    
        Scanner scan = new Scanner(System.in);
        System.out.println("Please input test scores with values between 0-100. Enter 999 to finish.");
        int num = scan.nextInt();
    
        do {
            if (num == 999)
                break;
    
            if (num >= 0 && num <= 100) {
                scores.add(num);
            }
        }
    
        while ((num = scan.nextInt()) != 999);
        if (scores.size() != 0) {
            System.out.println("Test Statistics:");
            System.out.println("Number of tests: " + scores.size());
            System.out.println("Lowest: " + scores.indexOf(Collections.min(scores)));
            System.out.println("Highest: " + scores.indexOf(Collections.max(scores)));
            System.out.printf("Average: " + scores.stream().mapToInt(Integer::intValue).sum() / scores.size());
        } else {
            System.out.println("Test Statistics:");
            System.out.println("Number of tests: 0");
            System.out.println("Lowest: 0 *or write whatever you want here");
            System.out.println("Highest: 0");
            System.out.printf("Average: 0");
        }
    
  2. # 2 楼答案

    你可能想考虑改变:

    if(num==999) 
        System.exit(0);
    

    致:

    if(num==999) 
        break;
    

    当您的第一个输入为“999”时,它将导致退出do-while循环而不是完成程序。您需要解决的问题是在此处除以0:

    System.out.printf("Average: " + sum/count);
    

    您可以将其更改为以下内容:

    if (count == 0) {
        System.out.printf("Average: 0"); // Show average as 0 here, when count is equal to 0.
    } else {
        System.out.printf("Average: " + sum / count);
    }
    

    或者类似于您需要执行的操作,而不是在那里除以0