当前位置: 首页 > 知识库问答 >
问题:

线程main java.util.InputMisMatchException中出现异常

孙俊彦
2023-03-14
import java.util.*;

class StoreName {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 5; i++) {
            String name = sc.nextLine();
            int age = sc.nextInt();
            map.put(name, age);
        }

        for (String key : map.keySet())
            System.out.println(key + "=" + map.get(key));
    }
}

当我从nextInt()获取输入时,扫描器会抛出InputMismatchException异常,但是如果我从nextLine()获取输入,然后将其解析为int,那么我的代码会正常运行。

如果可以将字符串输入解析为任何类型,为什么还要使用nextInt()或nextDouble()。

共有1个答案

南门鸿畴
2023-03-14

sc.nextint()不读取整行。

假设您输入

John
20
Dan
24

现在让我们看看每个扫描仪调用将返回什么:

  String name=sc.nextLine(); // "John"
  int age=sc.nextInt(); // 20
  String name=sc.nextLine(); // "" (the end of the second line)
  int age=sc.nextInt(); // "Dan" - oops, this is not a number - InputMismatchException 
for(int i=0;i<5;i++)
{
   String name=sc.nextLine();
   int age=sc.nextInt();
   sc.nextLine(); // add this
   map.put(name,age);
}
String name=sc.nextLine(); // "John"
int age=sc.nextInt(); // 20
sc.nextLine(); // "" (the end of the second line)
String name=sc.nextLine(); // "Dan"
int age=sc.nextInt(); // 24
sc.nextLine(); // "" (the end of the fourth line)
 类似资料: