簡體   English   中英

為什么我的for循環中的提示第一次打印兩次?

[英]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

這個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM