2014-12-05 76 views
0

我不知道如何让用户输入三个唯一的数字。我试图创建另一个数组,添加输入并检查损坏数组以确保所有数字都是唯一的,但似乎不起作用。感谢您的任何帮助!!只接受来自用户的唯一输入到ArrayList

ArrayList<Integer> damage = new ArrayList<Integer>(); 

    ArrayList<Integer> unique = new ArrayList<Integer>(); 
    for (int k = 0; k<=10; k++) 
    { 
     unique.add(k); 
    } 
    do 
    { 
     System.out.print("Attack or Defend? (A or D) "); 
     option = keyboard.nextLine().toUpperCase(); 
     System.out.println(); 
     switch (option) 
     { 
      case "A": 
       System.out.println("Enter three unique random numbers (1-10)"); 
       for(int i = 0; i<3; i++) 
       { 
        System.out.print("number " + (i+1) + ": "); 
        input = keyboard.nextInt(); 
        if (input < 1 || input > 10) 
        { 
         System.out.println("Error! Enter a valid number (1-10)"); 
        } 
        else 
        { 
         if (unique.contains(input)) 
         { 
          unique.remove(input); 
          System.out.println(unique); 
          damage.add(input); 
          System.out.println(damage); 

          i--; 
         }       
         else 
         { 
          unique.add(0, input); 
          System.out.println("Number is not unique!"); 
         } 

        } 
       } 
       System.out.println(damage); 
       System.out.println(); 
       UserDamage ahit = new UserDamage(damage, option); 
       name.getName(); 
       ahit.setUserDamage(damage, option); 
       System.out.println("\n"); 
       cpuHealth-=ahit.getUserDamage(); 
       cpu.setCpuDamage(); 
       userHealth-=cpu.getCpuDamage(); 
       System.out.println("\n\nHealth left: " + userHealth); 
       System.out.println("Computer health left: " + cpuHealth + "\n"); 
       damage.clear(); 
       option = null; 
       break; 


      default: 
       System.out.println("Invalid selection."); 
       break; 
     } 
    } 
    while(userHealth>0 || cpuHealth >0); 

回答

2

java.util.List使用contains方法来确定,如果该项目已经存在。根据JavaDoc:

布尔包含(对象o)

返回true,如果此列表包含 指定的元素。更正式地说,当且仅当此列表包含至少一个元素e以使得(o == null?e == null: o.equals(e))返回true。

0

contains()方法应该对你有用。因此,输入一个数字可能如下所示:

while(input > 10 || input < 0 || damage.contains(input)) { 
    System.out.print("number " + (i+1) + ": "); 
    input = keyboard.nextInt(); 
} 
0

您已接近。在这里只需要更多的逻辑工作,并使用Mike Kobit所建议的。

ArrayList<Integer> damage = new ArrayList<Integer>(); 

System.out.println("Enter three unique random numbers (1-10)"); 
      for(int i = 0; i<3; i++) 
      { 
       System.out.print("number " + (i+1) + ": "); 
       input = keyboard.nextInt(); 

       if(damage.contains(input) == false && input > 0 && input <= 10) 
        damage.add(input); 
       else{ 
        System.out.println("Error! Enter an unique valid number (1-10)"); 
        i--; 
       } 
      } 

i--是循环的,所以如果你输入了3次错误的值,没有值会进入数组。