难以在java中显示输入字符串

时间:2018-04-24 19:49:01

标签: java string stdin

我在Hackerrank上解决了一个问题,我必须输入一个整数,一个double和一个字符串,并使用stdout打印结果。

输入

42
3.1415
Welcome to HackerRank's Java tutorials!

输出

String: Welcome to HackerRank's Java tutorials!
Double: 3.1415
Int: 42

我编写了以下代码,但我无法通过我的测试用例:

import java.util.Scanner;

public class Solution {

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    String ss = s.nextLine();
    int i = s.nextInt();
    double d = s.nextDouble();


    System.out.println("String: "+ss);
    System.out.println("Double: "+d);
    System.out.println("Int: "+i);
  }
}

代码有什么问题吗? 该问题还指出: -

  

注意:如果在nextInt()方法之后立即使用nextLine()方法,请记住nextInt()读取整数标记;因此,该行整数输入的最后一个换行符仍在输入缓冲区中排队,下一个nextLine()将读取整数行的剩余部分(为空)。

以下是我的输出:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Solution.main(Solution.java:8)

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

诀窍是在获取s.nextLine();之前添加String,因为它会读取其上带有数字的行的剩余部分(在我怀疑的数字之后没有任何内容)

如果您打算忽略该行的其余部分,请尝试在每个s.nextLine();之后放置一个nextInt()。  所以完整的代码将是:

Scanner s = new Scanner(System.in);
int i = s.nextInt();
double d = s.nextDouble();
s.nextLine();
String ss = s.nextLine(
System.out.println("String: "+ss);
System.out.println("Double: "+d);
System.out.println("Int: "+i);