2017-08-04 73 views
0

我正在编写一个Java程序,用户在其中输入三个主题的标记,并根据该标记获取其成绩,但在获取输入时出现错误。下面是代码:在Java中使用nextInt获取输入

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) 

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

+1

您键入了什么? – azro

回答

2

这适用于我,我的猜测是,你输入的输入不是一个整数 - 无论是文本或可能是一个小数点的数字?

如果是,你需要能够带小数点来处理数字,我建议把变量abc要么doublefloat类型,然后使用in.nextDouble()in.nextFloat()

如果您需要处理非数字输入,例如,如果有人输入“one”而不是“1”,则需要将输入值读作Strings,并将其转换为in.next(),然后将其转换为整数(或者浮点数或双精度数,如果你需要十进制数),并捕获异常,如果它不转换。作为你会如何做这样的事情的例子:

String inValue = in.next(); 
try { 
    a = Integer.parseInt(inValue); 
} catch (NumberFormatException ex) { 
    // Do something else, like exiting with an error message or setting the value to 0. 
} 

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

4

nextInt method的文档:

抛出:InputMismatchException - 如果下一个标记不匹配 Integer正则表达式,或者超出范围

所以,你应该处理这如果用户输入错误的输入,则为异常可能是这样的:

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); 

与其他变量一样。你甚至可以写另一种方法来做到这一点,并避免重复自己(干原理)

-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"; 
} 
+0

这是不正确的;您发布的代码和原始代码是相同的。 – DaveyDaveDave

+1

**“你需要更多'其他'的陈述?”** - 嗯? –

+1

你怎么可能声称我的代码和原文是等价的?你有没有试过运行它们?假设avg等于83.原始代码将gr设置为区别,但最后的if-else会将其设置为失败。我的代码没有。 – Speakjava