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在你的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,如下所述.如果翻译成功,扫描仪将超过匹配的输入.
"超过匹配的输入"意味着在换行/回车之前.