为什么我的for循环中的提示第一次打印两次?

twj*_*s29 6 java printing for-loop

我的for循环中的第一个print语句打印两次,然后再转到下一行.但是之后它会像之后那样贯穿循环?

我尝试使用我的调试器,但我以前从未使用它,我们没有在我的任何课程中使用它,我不太确定我在做什么

public static void main(String[] args) 
{
    int numElements;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("How many people are you adding: ");
    numElements = keyboard.nextInt();
    ArrayBndQueue queue = new ArrayBndQueue<>(numElements + 1);

    for(int index =0; index <= numElements; index++)
    {
        System.out.println("Enter a gender and name (ex: f jenny)");
        String name = keyboard.nextLine();
        System.out.println(name);
        queue.enqueue(name);

    }

}  
Run Code Online (Sandbox Code Playgroud)

rol*_*lfl 13

你有一个所谓的一个一个错误.许多语言的基础之一是它们在索引时是零基础的.你有一半的权利,你有一个错误(实际上是两个),而不是修复该错误,你只修复了症状....

关闭一个bug

这个bug在你的for循环中:

for(int index =0; index <= numElements; index++)
Run Code Online (Sandbox Code Playgroud)

你循环的时间太多了......你应该使用<而不是<=在测试条件下.这样你就会循环numElements次数.

您没有修复它,而是使队列1元素太大,因此您应该更改:

ArrayBndQueue queue = new ArrayBndQueue<>(numElements + 1);
Run Code Online (Sandbox Code Playgroud)

成为:

ArrayBndQueue queue = new ArrayBndQueue<>(numElements);
Run Code Online (Sandbox Code Playgroud)

这应该排除额外的循环,你仍然有值的空间.

扫描仪管理错误

Scanner.nextInt()只从扫描仪中拉出int值,而不是终止换行符/回车符,所以当你nextLine()在循环中调用它时,它会清除已经在扫描仪中的行,而不是等待输入.

您需要在nextInt()通话结束前清除扫描仪的线路:

numElements = keyboard.nextInt();
keyboard.nextLine();
Run Code Online (Sandbox Code Playgroud)

这应该清除您的扫描仪下一个输入.

文档:

nextInt() - 将输入的下一个标记扫描为int.如果下一个标记无法转换为有效的int值,则此方法将抛出InputMismatchException,如下所述.如果翻译成功,扫描仪将超过匹配的输入.

"超过匹配的输入"意味着换行/回车之前.