Java 为什么sc.next()或sc.nextLine()不能在循环中工作?

Java 为什么sc.next()或sc.nextLine()不能在循环中工作?,java,formatting,string-formatting,Java,Formatting,String Formatting,问题: 每行输入将包含一个字符串,后跟一个整数。 每个字符串最多包含10个字母字符,每个整数的包含范围为0到999 输出代码 在输出的每一行中应有两列: 第一列包含字符串,并使用15个字符左对齐。 第二列包含整数,精确表示为3位数字;如果原始输入少于三位,则必须用零填充输出的前导数字 有关更多信息,请查看此链接: 这是我写的Java代码: 我的确切疑问/问题 虽然上面的代码编译并运行得非常完美,但我决定做一些更改并尝试一些不同的东西。我在这一行之后添加了下面一行代码 int x=sc.next

问题:

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

输出代码

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

有关更多信息,请查看此链接:

这是我写的Java代码:

我的确切疑问/问题

虽然上面的代码编译并运行得非常完美,但我决定做一些更改并尝试一些不同的东西。我在这一行之后添加了下面一行代码

int x=sc.nextInt

我添加的行是:

sc.next

但是,添加该行代码后,程序将不再接受第一行之后的输入。也就是说,只打印输入的第一行,而不打印下一行。 我将代码sc.nextLine更改为sc.nextLine,但现在程序只打印前2行,跳过打印最后一行。我编写的代码应接受3行文本,并使用printf将这三行打印为标准输出。 谁能解释一下为什么会这样

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

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

谁能解释一下为什么会这样

提前感谢

如果将sc.next放在代码之后,扫描器将读取并使用下一个字符串,那么循环将从第二行的整数开始,这就是它无法正常工作的原因。现在如果放置sc.nextLine,它将读取并使用下一行,因此循环将从第三行开始,这就是为什么只有两行。循环后不应使用sc.next或sc.nextLine;保持原样。

NextLink的可能重复不会使用下线结束字符,因此您确实需要nextLine来清除输入缓冲区。
 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("================================");
  }
}