当我从用户那里获取输入时,为什么java会显示异常?

zpjtge22  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(343)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题

public static void inputThenPrintSumAndAverage (){
        Scanner scanner = new Scanner(System.in);
        int count =0;
        int sum =0 ;
        long average = 0;
        boolean isAnInt = scanner.hasNextInt();
        while (true) {
            count++;
            int number = scanner.nextInt();
            if (isAnInt) {
                sum+=number;
                average = Math.round((sum/count));
            } else {
                break;
            }
            scanner.nextLine();
        }
        System.out.println("SUM = "+sum+ " AVG = "+average);
        scanner.close();
    }

当我给它一个字符串时,它会给出异常,甚至不执行“sum and avg”值。如何更改代码以使其正常工作?如果我有一些错误的概念知识,请帮助我理解这个概念。谢谢您。

vfwfrxfs

vfwfrxfs1#

你不需要 Scanner#hasNextInt 为了 Scanner(System.in) . 而且,你不需要支票, if (isAnInt) . 相反,你应该放一个 try-catch 阻止。
你不应该关门 Scanner(System.in) ; 否则,如果不重新启动jvm,就无法再次打开它。
当您使用 Scanner 为了一个 File .
演示:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Test
        inputThenPrintSumAndAverage();
    }

    public static void inputThenPrintSumAndAverage() {
        Scanner scanner = new Scanner(System.in);
        int count = 0;
        int sum = 0;
        long average = 0;
        while (true) {
            try {
                int number = scanner.nextInt();
                sum += number;
                count++;
            } catch (InputMismatchException e) {
                break;
            }
        }
        average = Math.round((sum / count));
        System.out.println("SUM = " + sum + " AVG = " + average);
    }
}

示例运行:

2
3
5
8
abc
SUM = 18 AVG = 4

注意:如果将平均值声明为 double 并将浮点计算存储到其中而不进行舍入,例如。

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Test
        inputThenPrintSumAndAverage();
    }

    public static void inputThenPrintSumAndAverage() {
        Scanner scanner = new Scanner(System.in);
        int count = 0;
        int sum = 0;
        double average = 0;
        while (true) {
            try {
                int number = scanner.nextInt();
                sum += number;
                count++;
            } catch (InputMismatchException e) {
                break;
            }
        }
        average = (double) sum / count;
        System.out.println("SUM = " + sum + " AVG = " + average);
    }
}

此更改后的示例运行:

2
3
5
8
abc
SUM = 18 AVG = 4.5

理解这个概念对你也很有帮助。

相关问题