【问题标题】:Why doesn't this for-loop let me input text the first cycle?为什么这个 for 循环不让我在第一个循环中输入文本?
【发布时间】:2009-11-29 12:31:17
【问题描述】:

我想要做的是要求用户将多个字符串读入数组,然后要求用户输入该数量的字符串并将它们读入数组。当我运行此代码时,它从不要求我在第一个 for 循环的第一个循环中输入,只是打印出“String #0: String #1:”然后我可以输入文本。为什么会这样?我做错了什么?

import java.util.Scanner;

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

    System.out.print("Number of inputs: ");

    int lines= sc.nextInt();
    String[] text=new String[lines];

    for(int x=0; x<text.length; x++)
    {
        System.out.print("String #"+x+": ");
        text[x] = sc.nextLine();
    }

    for(int y=0; y<text.length; y++)
        System.out.println(text[y]);

}
}

【问题讨论】:

    标签: java arrays string java.util.scanner


    【解决方案1】:

    缓冲。

    nextInt() 不使用输入缓冲区中的换行符,该换行符是在您输入输入数量时放置在那里的。在 for 循环的第 0 次迭代中,缓冲区中已经有一行输入,nextLine() 可以立即完成,程序只会在第 1 次迭代中等待新的输入行。要忽略输入中的换行符,可以添加在进入 for 循环之前只是另一个 nextLine() 调用。

    【讨论】:

    • 谢谢你,这创造了奇迹。我想我明白你的意思,虽然我不熟悉输入缓冲区。
    【解决方案2】:

    也许你应该改变你的循环来使用'sc.next()'

    for ( int x = 0; x < lines; x++ ) {
        System.out.print("String #" + x + ": ");
        text[x] = sc.next();
    }
    

    可以用Java API解释

    String next():从这个扫描器中查找并返回下一个完整的令牌。

    String nextLine():使扫描器前进超过当前行并返回被跳过的输入。

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2014-11-15
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多