gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:38 24 4
gpt4 key购买 nike

我的 for 循环中的第一个 print 语句在转到下一行之前被打印了两次。但是之后它会像它应该的那样运行循环吗?

我尝试使用我的调试器,但我以前从未使用过它,我们还没有在我的任何类(class)中使用过它,我不太确定我在做什么

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);

}

}

最佳答案

你有所谓的an off-by-one error .许多语言的基础之一是它们在索引方面是从零开始的。你只对了一半,你有一个错误(实际上是两个),而不是修复那个错误,你只修复了症状....

因一个错误而关闭

错误在你的 for 循环中:

for(int index =0; index <= numElements; index++)

循环次数过多的地方...您应该使用 <而不是 <=在测试条件下。这样你就会循环 numElements次。

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

ArrayBndQueue queue = new ArrayBndQueue<>(numElements + 1);

成为:

ArrayBndQueue queue = new ArrayBndQueue<>(numElements);

这应该可以解决额外的循环,并且您仍然可以为这些值留出空间。

扫描仪管理错误

Scanner.nextInt()仅从扫描器中提取 int 值,而不是终止换行符/回车符,因此当您调用 nextLine() 时在您的循环中,它会清除已经在扫描仪中的行,而不是等待输入。

nextInt() 之后前进之前,您需要清除扫描仪的线路调用:

numElements = keyboard.nextInt();
keyboard.nextLine();

这应该清除您的扫描仪以进行下一次输入。

来自 the documentation :

nextInt() - Scans the next token of the input as an int. This method will throw InputMismatchException if the next token cannot be translated into a valid int value as described below. If the translation is successful, the scanner advances past the input that matched.

“前进到匹配的输入” 表示 换行符/回车符之前。

关于java - 为什么我的for循环中的提示第一次打印两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154206/

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