java - 在线程“main”中获取异常 java.util.InputMismatchException
问题描述
我试图一一接受输入,然后尝试对它们执行操作。按照我的代码。
import java.util.Scanner;
public class PlayerRoster {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
final int LENGTH = 5;
final char quit = 'q';
char uin = 'z';
int jersey = 0;
int chng = 0;
int[] number = new int[LENGTH];
int[] rating = new int[LENGTH];
for(int i = 0; i < LENGTH; i++){
System.out.println("Enter player "+(i+1)+"'s jersey number:");
number[i] = scnr.nextInt();
System.out.println("Enter player "+(i+1)+"'s rating:\n");
rating[i] = scnr.nextInt();
}
for(int i = 0; i < LENGTH; i++){
if (i == 0)
System.out.println("ROSTER");
System.out.println("Player " + (i + 1) + " -- Jersey number: " + (number[i]) + ", Rating: " + (rating[i]));
if (i == 4)
System.out.println("");
}
while (uin != quit){
System.out.println("MENU");
System.out.println("u - Update player rating");
System.out.println("a - Output players above a rating");
System.out.println("r - Replace player");
System.out.println("o - Output roster");
System.out.println("q - Quit\n");
System.out.println("Choose an option:");
uin = scnr.next().charAt(0);
if (uin == 'o')
for(int i = 0; i < LENGTH; i++){
if (i == 0)
System.out.println("ROSTER");
System.out.println("Player " + (i + 1) + " -- Jersey number: " + (number[i]) + ", Rating: " + (rating[i]));
if (i == 4)
System.out.println("");
}
if (uin == 'u')
System.out.println("Enter a jersey number: ");
chng = scnr.nextInt();
}
}
}
我目前没有专注于逻辑,因为我无法接受输入,因为我Exception in thread "main" java.util.InputMismatchException
只是想获得更多的用户输入。
我的输入是:
20 5 30 2 50 4 60 8 93 9 u 20 q
我已经尝试了从char
正常到正常的一切Strings
。感觉好像扫描仪不工作或其他什么。
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at PlayerRoster.main(PlayerRoster.java:55)
解决方案
问题是代码块
if (uin == 'u')
System.out.println("Enter a jersey number: ");
chng = scnr.nextInt();
因为你只需要球衣号码,以防用户输入'u'你的 chng = scnr.nextInt(); 应该在 if 块内。在您的情况下,即使用户将输入作为“q”,它仍然期望用户提供更多输入,并且在这种情况下,您可能只是给了空格,从而给您 InputMisMatchException。
要修复它,请将代码更新为
if (uin == 'u')
{
System.out.println("Enter a jersey number: ");
chng = scnr.nextInt();
}
因此,现在如果您将输入作为“q”提供,您的循环将停止执行,这是预期的输出。
推荐阅读
- php - 我可以使用哪些机制将结果集传输到另一个视图页面?
- javascript - 如何使用jquery动态更改用wordpress制作的网站中div的背景?
- elasticsearch - 如何在 Elasticsearch 中与 filter 和 must_not 一起编写至少 N 个术语的查询?
- python - 拆分数据框中的几列
- android-recyclerview - TextView 在 RecyclerView 中仅显示第一个字母
- scala - 如何使用 µPickle 序列化通用案例类?
- azure - 如何使用 Go SDK 在 Azure 存储中列出共享
- javascript - 使用 ajax 操作更新模态内容而不在用户操作后关闭它 - Odoo 前端
- batch-file - 重命名多个文件添加前缀
- angular - Angular 组件未获得 Google Chart 参考