我正在尝试创建一个程序,用户可以根据他们到达和离开工作的时间来计算他们的日薪。然而,我收到了过去一小时相同的错误消息,我们将非常感谢任何帮助。
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");
}
}
答案 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)
嗯,其他两个人有点回答你,所以这里有一些关于如何处理错误信息的提示:
Exception in thread "main"
,只要您编写使用一个线程的程序,就会说in thread "main"
。简单地说,没有其他线程存在。java.util.InputMismatchException
这是重要的,它会告诉您为什么该程序无法继续。at
开头的行。这是call stack。基本上是当前正在调用的函数列表(当前=崩溃时)
所以,如果你看到你当前的功能实际上是正确的,但是得到了错误的论据。然后你用它来看看“坏论据”来自哪里。所以这个人告诉哪里该程序无法继续。希望它能帮助你解决未来的错误。