gpt4 book ai didi

java - 为什么 sc.next() 或 sc.nextLine() 在循环内不起作用?

转载 作者:行者123 更新时间:2023-12-02 13:09:57 27 4
gpt4 key购买 nike

问题

每行输入都将包含一个字符串,后跟一个整数。每个字符串最多包含 10 个字母字符,每个整数都在 0 到 999 的范围内

输出代码

在输出的每一行中应该有两列:第一列包含字符串,并使用 15 个字符左对齐。第二列包含整数,以 3 位数字表示;如果原始输入少于三位数字,则必须用零填充输出的前导数字。

查看此链接以获取更多信息: hackerrank/challenges/java-output-formatting

这是我写的代码(Java):

 import java.util.Scanner;

public class Solution {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);

System.out.println("================================");
for(int i=0 ; i<3 ; i++){
String s1=sc.next();
int x=sc.nextInt();
System.out.printf("%-15s%03d\n",s1,x);
}
System.out.println("================================");
}
}

我的确切疑问/问题

虽然上面的代码编译并运行得很好,但我决定进行一些更改并尝试一些不同的东西。我在该行之后添加了以下代码行

int x=sc.nextInt();

我添加的行是:

sc.next();

但是,添加该行代码后,程序将不再接受第一行之后的输入。也就是说,只有第一行输入会被打印,下一行会被忽略(不打印)。我将代码 sc.next() 更改为 sc.nextLine() 但现在程序只会打印前 2 行并跳过打印最后一行(我的代码write 应该接受 3 行文本并使用 printf 将这三行打印到标准输出。谁能解释一下为什么会发生这种情况?

我在网上读到,如果我必须分别使用 next() 和 nextInt() 读取整数后读取字符串,那么我需要在读取整数之后和读取之前添加额外的 next() 或 nextLine() 调用字符串。(这是将扫描仪移动到下一个字符,因为转义字符被 nextInt() 忽略)。

在我的程序中,在循环的第一次迭代期间,最后一次从标准输入读取数据是在读取整数时发生的。在第二次迭代的开头,字符串是第一个被读取的字符串。因此注意到这一点,我进行了更改,但程序没有按计划运行。但是,如果我删除中间的额外读取,该程序就可以完美运行。

谁能解释一下为什么会发生这种情况吗?

提前致谢

最佳答案

如果您将 sc.next() 放在代码后面,Scanner 将读取并使用下一个字符串,然后您的循环将从第二行的整数开始——这就是它无法正常工作的原因。现在,如果您放置 sc.nextLine(),它将读取并消耗下一行,因此您的循环将从第三行开始,这就是为什么您只有两行。您不应在循环后使用 sc.next()sc.nextLine();保持原样即可。

关于java - 为什么 sc.next() 或 sc.nextLine() 在循环内不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com