我在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)
有人可以解释一下吗?
答案 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);