Java:在Array中实现具有重复值的循环

时间:2014-11-25 02:01:10

标签: java arrays loops duplicates

我的任务是在数组中输入名称。如果已经输入了名称,程序必须提醒相关信息并提供以相同号码重新输入播放器。

这是我的代码:

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指定true,但是当它返回到while循环的开头时,该值再次为false(“CHECK:false”)。

看起来很容易,但我被抓了......

另外,我不想使用HashSet并且只想使用Array。

非常感谢!

编辑:

感谢其他人,我将代码重写为以下内容:

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");
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您遇到的问题是由于

} while (isDuplicate = false);

应该是(介意双==)

} while (isDuplicate == false);

除此之外,您的代码效率很低。如果真的是你想要的话,你可能会用两个阵列做得更好,否则链表最好。

答案 1 :(得分:1)

您的while不正确,此

while (isDuplicate = false);

false分配给isDuplicate,其副作用也是评估false。你看过像

这样的东西
while (isDuplicate == false);

或更短的

while (!isDuplicate);

答案 2 :(得分:1)

回答改革后,使用List添加越来越多没有预定义大小的元素。

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