使用nextInt在Java中输入

时间:2017-08-04 14:40:03

标签: java input

我正在编写一个Java程序,其中用户输入三个主题的标记,并根据它获得成绩,但在获取输入时出错。这是代码:

import java.util.*;
public class Prog {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a, b, c;
        double avg;
        String gr;
        System.out.println("marks in Physics,Chemistry,Biology");
        a = in .nextInt();
        b = in .nextInt();
        c = in .nextInt();
        avg = (a + b + c) / 3;
        if (avg > 80) {
            gr = "distinction";
        }
        if (avg >= 60 && avg < 80) {
            gr = "first division";
        }
        if (avg >= 45 && avg < 60) {
            gr = "second division";
        }
        if (avg >= 40 && avg < 45) {
            gr = "pass";
        } else {
            gr = "fail";
        }
        System.out.println(gr);
    }
}

显示此错误:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Prog.main(Prog.java:9)

我做错了什么,我该如何解决?

3 个答案:

答案 0 :(得分:4)

来自nextInt method

的文档
  

抛出:InputMismatchException - 如果下一个标记与   整数正则表达式,或超出范围

因此,如果用户输入错误的输入,您应该处理此异常。可能是这样的:

    boolean inputOk = false;
    do{
        System.out.println("enter your first grade");
        try {
            a = in .nextInt();
            inputOk = true;
        } catch (InputMismatchException  e) {
            System.out.println("not a valid number");
            in.nextLine(); // to reset the scanner
        }
    }while (!inputOk);

对其他变量执行相同操作。您甚至可以编写另一种方法来避免重复自己(DRY原则)

答案 1 :(得分:2)

这对我有用,我的猜测是你输入的输入不是整数 - 文本或带小数点的数字?

如果您需要能够处理带小数点的数字,我建议将变量abc设为double或{ {1}}类型,然后使用floatin.nextDouble()

如果您需要处理非数字输入,例如,如果有人输入“one”而不是“1”,那么您需要将输入值作为字符串读取in.nextFloat(),然后将它们转换为整数(如果需要十进制数,则转换为浮点数或双精度数),如果不转换则捕获异常。作为如何做这样的事情的一个例子:

in.next()

最后,检查你的条件得分,我认为其中至少有一个是不正确的(提示:尝试你的代码在等级边界上的分数 - 例如40,45,60和80)。

答案 2 :(得分:-2)

输入代码适用于我,但你的if语句有缺陷。你需要更多的“其他”陈述:

if (avg > 80) {
  gr = "distinction";
} else if (avg >= 60 && avg < 80) {
  gr = "first division";
} else if (avg >= 45 && avg < 60) {
  gr = "second division";
} else if (avg >= 40 && avg < 45) {
  gr = "pass";
} else {
  gr = "fail";
}