理解Java中Scanner的奇怪行为

huangapple 未分类评论53阅读模式
英文:

Understand Java Scanner weirdness

问题

我正在为学校的代码工作,在读取用户输入时遇到了问题。我创建了一个新的测试类,以查看是否是围绕它的代码出现了问题,但事实并非如此。以下是简化后的代码示例。

import java.util.*;
public class practice {
    public static void main(String[] args){
        Scanner kb = new Scanner(System.in) ;
        String fullname = kb.nextLine();
        int age = kb.nextInt();
        String program = kb.nextLine();
        int number = kb.nextInt();
        System.out.println(fullname);
        System.out.println(age);
        System.out.println(program);
        System.out.println(number);
    }
}

出现了以下错误:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    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 practice.main(practice.java:8)

我已经标记了错误发生的位置。为什么会发生这种情况,我该如何修复?

我已尝试过:

  • 在第一个 kb.nextLine() 后添加了 kb.nextLine()
  • 尝试在每次输入后重置扫描器。
英文:

I'm working on code for school and ran into a problem while reading user input. I made a new class for testing to see if it is my code around it and it's not. Here is the simplified code.

    import java.util.*;
public class practice {
    public static void main(String[] args){
      Scanner kb = new Scanner(System.in) ;
      String fullname = kb.nextLine();
      int age = kb.nextInt();
      String program = kb.nextLine();
    * int number = kb.nextInt();
      System.out.println(fullname);
      System.out.println(age);
      System.out.println(program);
      System.out.println(number);
    }
}

The following error comes up

Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	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 practice.main(practice.java:8)

I've marked where the error is incurring. Why is this happening and how can I fix this?

What I've tried so far:

  • Added kb.nextLine() after the first kb.nextLine()
  • Tried to reset the scanner after each input

答案1

得分: 0

Scanner kb = new Scanner(System.in);
String fullname = kb.nextLine();
int age = kb.nextInt();
kb.nextLine();
String program = kb.nextLine();
int number = kb.nextInt();

kb.nextLine();
System.out.println(fullname);
System.out.println(age);
System.out.println(program);
System.out.println(number);
英文:
  Scanner kb = new Scanner(System.in) ;
  String fullname = kb.nextLine();
  int age = kb.nextInt();
  kb.nextLine();
  String program = kb.nextLine();
  int number = kb.nextInt();
  
  kb.nextLine();
  System.out.println(fullname);
  System.out.println(age);
  System.out.println(program);
  System.out.println(number);

Ref: https://stackoverflow.com/questions/38319917/inputmismatchexception-when-using-sacnner-nextline-for-string

huangapple
  • 本文由 发表于 2020年3月16日 04:22:09
  • 转载请务必保留本文链接:https://java.coder-hub.com/60697286.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定