![](/img/trans.png)
[英]Why is my loop not printing the first line of the loop after the first iteration?
[英]Why is the prompt in my for loop printing twice the first time?
我的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);
}
}
你有一個所謂的一個一個錯誤 。 許多語言的基礎之一是它們在索引時是零基礎的。 你有一半的權利,你有一個錯誤(實際上是兩個),而不是修復該錯誤,你只修復了症狀....
這個bug在你的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();
這應該清除您的掃描儀下一個輸入。
從文檔 :
nextInt() - 將輸入的下一個標記掃描為int。 如果下一個標記無法轉換為有效的int值,則此方法將拋出InputMismatchException,如下所述。 如果翻譯成功,掃描儀將超過匹配的輸入。
“超過匹配的輸入”意味着在換行/回車之前 。
最好的解決方法是簡單地從scanner方法中刪除elementType。 通過這樣做,可以防止循環的第一個實例清除輸入,如上面的rolfl提到的那樣。 修改后的代碼如下:
for(int index =0; index <= numElements; index++)
{
System.out.println("Enter a gender and name (ex: f jenny)");
//removed "Line" from ".nextLine" to prevent clearing below
String name = keyboard.next();
System.out.println(name);
queue.enqueue(name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.