【问题标题】:Exception in thread "main" java.util.InputMismatchException for string input [closed]字符串输入的线程“main”java.util.InputMismatchException中的异常[关闭]
【发布时间】:2021-03-17 15:44:37
【问题描述】:

我是java新手。

当我尝试为这个程序输入值时,我得到了

    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at SugarSmashPlayer.get(Game.java:10)
    at Game.main(Game.java:44)

我不知道为什么会这样。我的猜测是我在字符串声明或输入法上做错了。你能帮我吗。如果我用输入行声明字符串数据类型,程序不会显示错误。但我想用类在上面声明它,而不是在构造函数中。

import java.util.*;
class SugarSmashPlayer{
Scanner in=new Scanner(System.in);
int id;int n=0;String name;
int[] arr=new int[40];
void get(){
id=in.nextInt();
name=in.nextLine();
for(int i=0;i<10;){
arr[i]=in.nextInt();
n++;
if(arr[i]>=100){i++;}
else
{i=11;}
}
}
void set(){
System.out.println(id+" "+name+" ");
for(int i=0;i<n;i++){System.out.println(arr[i]+" ");
}
}
}
class PremiumSugarSmashPlayer extends SugarSmashPlayer{
void get1(){n=0;
id=in.nextInt();
name=in.nextLine();
for(int i=0;i<40;){
arr[i]=in.nextInt();
n++;
if(arr[i]>=100){i++;}
else
i=40;}
}
void set1(){
System.out.println(id+" "+name+" ");
for(int i=0;i<n;i++){System.out.println(arr[i]+" ");
}
}
}
public class Game{
public static void main(String[] args){
SugarSmashPlayer box=new SugarSmashPlayer();
PremiumSugarSmashPlayer box1=new PremiumSugarSmashPlayer();
box.get();
box.set();
box1.get1();
box1.set1();
}
}

【问题讨论】:

  • 请格式化代码并提及发生异常的行
  • 嗨。感谢回复。对不起,我是stackoverflow的新手。不知道如何格式化代码。如果我给 abc 这是 name 变量的字符串输入,则会发生错误。

标签: java class inheritance


【解决方案1】:

您的输入是:

1
abc

nextInt 将输入的下一个标记读取为 int,因此会将整数值 1 读取到 id 字段中。 然后,如果您使用nextLine,那么它将使用"" 初始化name 字段。 nextLine 的 Javadoc 声明:

将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。

然后arr[i] = in.nextInt() 将尝试读取abc,从而导致错误。

您应该输入:

1 abc
532
235

或者您需要将代码更改为:

id = Integer.parseInt(in.nextLine()); //whole line is read

【讨论】:

    【解决方案2】:

    你正在使用

    id = in.nextInt();
    

    如果有人输入的不是数字,就会发生此异常。

    您最好致电nextLine(),然后检查输入是否为数字。

    【讨论】:

    • 感谢您的回复。但我的输入是 1,abc 并继续。根据代码,我给出了一个整数 id 和一个字符串名称。但是一旦我输入 abc 它就会显示错误
    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多