2014-11-25 71 views
0

我的任務是將名稱輸入到數組中。如果名稱已經輸入,程序必須提醒,並提供相同數量的重新進入播放器。Java:在數組中實現具有重複值的循環

這是我的代碼:

public void enterNames() { 

    for (int i=0; i<nameOfPlayers.length; i++) 
    { 
      do 
      {  
       // isDuplicate is a Boolean initialized to false  
       System.out.println("CHECK": + isDuplicate); 

       System.out.println("Enter player " + (i+1) + ":"); 

       nameOfPlayers[i] = in.next(); 

       for (int k=0; k<nameOfPlayers.length; k++) 
       { 
        if (k!=i && nameOfPlayers[i].equals(nameOfPlayers[k])) 
        { 
         isDuplicate = true;      
         break; 
        }    
       } 
      } while (isDuplicate = false); 
     } 
} 

有趣的是,甚至當我進入一個重複的值,它被捕獲並指派真實isDuplicate,但當它返回到while循環的開始,值再次錯誤(「CHECK:false」)。

看起來像一件容易的事,但我抓住了......

而且,我不想使用HashSet的,並希望只使用數組。

非常感謝!

編輯:

感謝別人,我重寫了代碼如下:

public void enterNames() { 

    List<String> nameOfPlayersList = new ArrayList<String>(); 
    int i = 0; 

    for (i=0; i<numberOfPlayers;) 
    { 
     while(true) 
     { 
      System.out.println("Enter player " + (i+1) + ":"); 
      String input = in.next(); 

      if(!nameOfPlayersList.contains(input)) 
      { 
       nameOfPlayersList.add(input); 
       i++; 
       break; 
      } 
      System.out.println("Player " + input + " already exists, please retry"); 
     } 
    } 
} 

回答

1

答改革,用列表添加越來越多的元素,而無需預先定義的大小。

改變while (isDuplicate == false);while (!isDuplicate);

public static void main(String[] args) { 

     Scanner scanner = new Scanner(System.in); 
     List<String> nameOfPlayers = new ArrayList<String>(); 
     boolean isDuplicate = false; 
     int i = 0; 

     do { 
      System.out.println("Enter player " + (i + 1) + ": or Q for Quit"); 
      String input = scanner.next(); 

      if (!input.equalsIgnoreCase("Q")) { 
       if (nameOfPlayers.contains(input)) { 
        isDuplicate = true; 
       } else { 
        nameOfPlayers.add(input); 
        isDuplicate = false; 
       } 
       System.out.println("CHECK : " + isDuplicate); 
      } else { 
       break; 
      } 

      i++; 
     } while (!isDuplicate); 
    } 


Enter player 1: or Q for Quit 
ankur 
CHECK : false 
Enter player 2: or Q for Quit 
singhal 
CHECK : false 
Enter player 3: or Q for Quit 
ankur 
CHECK : true 
+0

非常感謝!我用一種不同的方式重新編寫代碼,但是你的解決方案提示瞭如何去做。 – 2014-11-26 01:14:34

1

您遇到的問題是因爲

} while (isDuplicate = false); 

它應該是(記雙==)

} while (isDuplicate == false); 

除此之外,你的代碼效率很低。如果這真的是你想要的,你可能會更好地使用兩個陣列,否則鏈接列表將是最好的。

+0

感謝。我完全忘記了這一點,同時要求==。 :-) – 2014-11-26 01:13:35

1

while是不正確,這

while (isDuplicate = false); 

分配falseisDuplicate擁有的也計算到false副作用。你watned像

while (isDuplicate == false); 

或短

while (!isDuplicate); 
+0

謝謝。我完全忘記了這一點,同時要求==。 :-) – 2014-11-26 01:13:17