首页 > 解决方案 > 这种方法有什么问题...?

问题描述

import java.util.Scanner;

public class InputCalculator {
    public static void inputThenPrintSumAndAverage(){
        Scanner scanner = new Scanner(System.in);

        boolean first = true;

        int sum = 0;
        int count = 0;
        int avg = 0;
        while(true){
            int number = scanner.nextInt();
            boolean isAnInt = scanner.hasNextInt();

            if(isAnInt){
                sum += number;
                count++;
                avg = Math.round((sum)/count);
            }else{
                System.out.println("SUM = " + sum + " AVG = " + avg);
                break;
            }
            scanner.nextLine();
        }
        scanner.close();
    }
}

当输入为“1、2、3、4、5、a”时,我认为它没有读取输入 5,结果 sum = 10 和 avg = 2!为什么会这样?顺便说一句,它只是一个方法而不是整个代码!

标签: java

解决方案


当scanner.nextInt() 为您提供'5' 时,下一行'scanner.hasNextInt() 为假。只需更改线路顺序

import java.util.Scanner;

public class InputCalculator {
    public static void inputThenPrintSumAndAverage(){
        Scanner scanner = new Scanner(System.in);

        boolean first = true;

        int sum = 0;
        int count = 0;
        int avg = 0;

        while(true){
            boolean isAnInt = scanner.hasNextInt();

            if(isAnInt){
                int number = scanner.nextInt();
                sum += number;
                count++;
                avg = Math.round((sum)/count);
            }else{
                System.out.println("SUM = " + sum + " AVG = " + avg);
                break;
            }
            scanner.nextLine();
        }
        scanner.close();
    }
}

你也可以清理代码

import java.util.Scanner;

public class InputCalculator {
    public static void inputThenPrintSumAndAverage(){
        Scanner scanner = new Scanner(System.in);

        int sum = 0;
        int count = 0;

        while( scanner.hasNextInt() ){
            int number = scanner.nextInt();
            sum += number;
            count++;
        }
        
        scanner.close();

        double avg = Math.round((sum)/count);
        System.out.println("SUM = " + sum + " AVG = " + avg); 
    }
}

推荐阅读