java - 一段简单的 Java 代码运行效果不佳

标签 java

以下 Java 中的简单代码的行为有些奇怪,我无法理解。

final public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.print("\nHow many names?   ");

        int n = sc.nextInt();
        String[] a = new String[n];

        a[0] = sc.nextLine(); //This line serves no purpose at all. It's useless and should be removed.

        for (int i=0; i<n; i++)
        {
            System.out.print("\nEnter the name:->");
            a[i] = sc.nextLine(); //request for input only inside the loop.
        }

        for (int i=0; i<a.length; i++)
        {
            System.out.println(a[i]);
        }
    }
}

上面的代码运行良好,没有任何问题,并在控制台上显示输入到数组 a[] 中的名称数量,但是当我删除行 <强>a[0] = sc.nextLine();//这一行根本没有任何作用。它没有用,应该删除。,它首先显示用户数量。假设 3. 没有问题,但是当循环开始迭代时,它将询问名称,并且第一次消息 输入名称:-> 显示两次

<小时/>

输出如下所示。

有多少个名字? 3

输入名称:-> 不允许在此处输入名称。

输入名字:->老虎

输入名字:->Pitter

老虎

皮特

<小时/>

虽然我在“多少个名字?”中输入了 3,但它只允许输入两个名字。为什么?

<小时/>

再次注意,上面显示的代码运行良好。仅当上面段落中用粗体后面指定的行被注释掉时才会出现该问题。

最佳答案

当您使用 Scanner.nextInt() 时,它本身不会消耗新行(或其他分隔符),因此返回的下一个标记通常是空字符串。因此,您需要在其后面添加 Scanner.nextLine()。您可以丢弃结果而不是将其分配给 a[0]:

int n = sc.nextInt(); 
sc.nextLine();

正是出于这个原因,我建议总是使用nextLine(或BufferedReader.readLine())并在使用之后进行解析>Integer.parseInt().

关于java - 一段简单的 Java 代码运行效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043255/

相关文章:

java - JPanel setPreferredSize 向宽度和高度添加两个额外的像素

java - 我可以在不知道子类是哪个子类的情况下创建子类的列表吗?

java - 来自 SQLite 结果的 Android 自定义 ArrayAdapter

java - 如何使用 ANT 构建具有不同 java 版本的 jar

java - 为什么 Java 日历中的 1 月是 0 月?

java - 索引 2 超出范围

java - 由于异常 :java. lang.ClassNotFoundException : com. android.webview.chromium.Drp,没有 DRP key

java - ClientSocket 未监听

javascript - 部署 java 后端和 Javascript 前端

java - 如何将zip文件写入httpresponse