在Java中计算Salary时线程“main”java.util.InputMismatchException中的异常

时间:2017-02-19 11:06:57

标签: java inputmismatchexception

我正在尝试创建一个程序,用户可以根据他们到达和离开工作的时间来计算他们的日薪。然而,我收到了过去一小时相同的错误消息,我们将非常感谢任何帮助。

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 Tidsrapport.main(Time.java:17)

我的代码:

import java.util.Scanner;

public class Time {

        public static void  main(String[] args)
        {
        int hours, minutes, totalhours;

        Scanner keyboard = new Scanner(System.in);
        keyboard.useDelimiter("\\s*:\\s*");

        System.out.print("When did you arrive at work today [hh:mm]>");
        keyboard.nextInt();

        System.out.print("When did you leave work today [hh:mm]>");
        keyboard.nextInt();

        hours = keyboard.nextInt();
        minutes = keyboard.nextInt();

        totalhours= hours + (minutes/60);
        double salary = totalhours * 9;

        System.out.println("Your salary today is:" + salary + "dollars");

        }

}

3 个答案:

答案 0 :(得分:2)

很多问题:

System.out.print("When did you arrive at work today [hh:mm]>");
keyboard.nextInt();

像10:15这样的输入不是 int 。你必须使用

next();

代替 - 返回字符串;然后你必须验证传入的字符串是否包含数字号冒号,例如。

但当然, none 这一点至关重要,因为您没有使用用户提供的值来填充任何内容。你需要这样的东西:

String rawArrivalTime = keyboard.next();

然后你可以使用那个局部变量rawArrivalTime;用于验证,解析,...

答案 1 :(得分:1)

the JavaDocs开始,nextInt()方法会在以下条件下抛出这些异常:

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

首先使用hasNextInt()来验证它是否真的是一个int。

答案 2 :(得分:0)

嗯,其他两个人有点回答你,所以这里有一些关于如何处理错误信息的提示:

  1. Exception in thread "main",只要您编写使用一个线程的程序,就会说in thread "main"。简单地说,没有其他线程存在。
  2. java.util.InputMismatchException这是重要的,它会告诉您为什么该程序无法继续。
  3. at开头的行。这是call stack。基本上是当前正在调用的函数列表(当前=崩溃时) 所以,如果你看到你当前的功能实际上是正确的,但是得到了错误的论据。然后你用它来看看“坏论据”来自哪里。所以这个人告诉哪里该程序无法继续。
  4. 希望它能帮助你解决未来的错误。