2013-10-12 56 views
2

我試圖從用戶那裏得到3名曲棍球運動員的名字和球衣號碼。然後,我用我創建的名爲HockeyPlayer的類創建一個對象。然後我把它放入數組中。第二次迭代不起作用。請幫忙!先謝謝你。「for」循環沒有按照我想要的方式迭代

ArrayList<HockeyPlayer> array = new ArrayList<HockeyPlayer>(); 

//For loop to input names 
for(int i=0; i < 3; i++) 
{ 
    System.out.print("Enter name of Player " + i +":"); 
    startName = keyboard.nextLine(); 
    System.out.print("Enter jersey number of Player " + i +":"); 
    playNum = keyboard.nextInt(); 

    //Make objects and add to array 
    HockeyPlayer p = new HockeyPlayer(startName, playNum); 
    array.add(p); 
} 
keyboard.close(); 
+1

任何異常??? –

+0

對不起,我對編程和本站比較陌生。你的意思是什麼異常? –

+1

在控制檯中的任何錯誤/登錄線程 –

回答

2

InputMismatchException's的JavaDoc:

由Scanner拋出,表明檢索到的令牌不期望類型匹配的模式,或者該標記超出範圍的預期的類型。

看來你輸入了一個字符串,而nextInt()需要一個整數。

+0

是的,你是對的,但我希望它要求一個字符串首先,然後要求一個整數。我不知道爲什麼它首先需要int。 –

4

的這裏的問題是,在循環的每次迭代中,您對nextLine()一個電話,然後nextInt()一個電話,但你撥打電話到nextInt()後,換行字符尚未被讀取。基本上,如果輸入的是一樣的東西

First Player Name 
1 
Second Player Name 
2 

那麼,你的循環的第一次迭代之後,Scanner剛剛讀完的1,但不換行後馬上。因此,在第二次迭代中,nextLine()處理1後的換行符,但是只有表示換行符。然後,nextInt()調用將嘗試將Second轉換爲int,並拋出InputMismatchException

常見的解決方法是在呼叫nextInt()之後再撥打nextLine()電話(並且只是扔掉這個額外的換行符),或者只是在呼叫時一次性讀取所有號碼使用Integer.parseInt()解析出int

+0

丹尼斯,哇!使用nextLine調用確實有效。非常感謝。但我實際上發現了另一個問題。我試圖使用「增強型for循環」打印出數據,但它不會以我想要的方式出現。 爲(HockeyPlayer VAL:陣列) \t \t { \t \t \t的System.out.println( 「球員是:」); \t \t \t System.out.println(val); \t \t} –

+0

讓我猜,你想打印出「球員是:」,然後每個球員的名字? –

+0

確切地說,它們的數字也不同。舉個例子: 白蘭地33 約翰21 –

0

如果第二次迭代表示第二個for,則可能必須覆蓋HockeyPlayer.toString()方法。

public String toString() { 
    return name+" "+startNum; 
} 
+0

在評論中,她提到她在第一個循環中得到了「InputMismatchException」。在她解決了最初的問題後,她說她有問題按照她想要的方式打印出信息,只有這樣才能編輯第二個問題。 –

0

我假設你的鍵盤變量的類型是java.util.Scanner。如果這是真的,那麼你需要在循環結束時調用keybord.reset()。

您的問題是keyboard.nextInt()不會消耗當您按Enter時產生的行尾。這一行字符的結尾負責你的例外。

此代碼:

 HockeyPlayer [] hArr = new HockeyPlayer[3]; 

     for(int i=0; i < 3; i++) 
     { 
      String startName = ""; 
      Scanner scanner = new Scanner(System.in); 
      int playNum = 0; 

      System.out.print("Enter name of Player " + i +":"); 
      startName = scanner.nextLine(); 
      System.out.print("Enter jersey number of Player " + i +":"); 
      playNum = scanner.nextInt(); 
      scanner.reset(); 

      HockeyPlayer p = new HockeyPlayer(startName, playNum); 
      hArr[i] = p; 
     } 
0

這是很好的去:

int playNum = Integer.parseInt(sc.nextLine());