为什么我必须输入两个重复的 nextLine 方法才能让空格用于打印字符串,而不是只输入一个重复的 nextLine 方法?

问题描述 投票:0回答:1

我正在接受一项编码挑战,其中我要从

stdin
中取出一个整数、一个双精度数和一个字符串,并将此打印结果打印在
stdout
中。该字符串必须是一个字符串,其中必须包含多个由空格分隔的单数单词。

当我在

nextLine
行下方仅使用单个
nextDouble
方法输入代码时,它在挑战网站上工作,但在我的编辑器中不起作用。该网站和我的编辑器都使用 Java 8。我尝试在编辑器中切换不同的 Java 8 包,但没有什么区别。给什么?

通常,根据我的收集,您只需放置 one dummy

nextLine
即可解决 Java
nextInt
方法不读取通过按“Enter”创建的换行符的问题。但在这种情况下,我必须这样做两次

import java.util.*;

public class Solution {
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();

        // Write your code here.
        scan.nextLine();
        double d = scan.nextDouble();
        scan.nextLine();
        scan.nextLine(); //why do I have to include this line in order for spaces to print on my string in stdout?
        String s = scan.nextLine();

        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}
java string java-8 java.util.scanner stdout
1个回答
0
投票

nextDouble() 方法仅读取双精度值。然而,每当用户输入数字时,用户都会按 Enter 键。这个 Enter 键本质上是换行符(“ ") 并且被 nextDouble() 方法忽略,因为它不是 double。我们说 nextDouble() 方法不消耗换行符。

每当您在 nextDouble() 方法之后使用 nextLine() 方法时,您应该始终有一个额外的 nextLine() 方法来使用前一个换行符。

© www.soinside.com 2019 - 2024. All rights reserved.