仅接受来自用户的唯一输入到ArrayList

时间:2014-12-05 21:52:03

标签: java validation input

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

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

3 个答案:

答案 0 :(得分:2)

使用contains中的java.util.List方法确定该项目是否已存在。来自Javadoc:

  

boolean contains(Object o)

     

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

答案 1 :(得分:1)

你很亲密。只需要在这里使用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次,那么数值就不会进入数组。

答案 2 :(得分:0)

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

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