【问题标题】:Difficulty in displaying the input string in java [duplicate]难以在java中显示输入字符串[重复]
【发布时间】:2018-04-24 19:49:01
【问题描述】:

我正在解决 Hackerrank 上的一个问题,我必须输入一个整数、一个双精度和一个字符串并使用标准输出打印结果。

输入

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)

谁能解释一下?

【问题讨论】:

    标签: java string stdin


    【解决方案1】:

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

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

    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);
    

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多