【问题标题】:Accept only unique input from a user into an ArrayList仅接受来自用户的唯一输入到 ArrayList
【发布时间】:2014-12-05 21:52:03
【问题描述】:

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

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

【问题讨论】:

    标签: java validation input


    【解决方案1】:

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

    布尔包含(对象o)

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

    【讨论】:

      【解决方案2】:

      你很接近。只需要在这里做一些更多的逻辑工作,并使用 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 次,则不会有任何值进入数组。

      【讨论】:

        【解决方案3】:

        contains() 方法应该对您有用。所以输入一个数字可能是这样的:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-15
          • 2014-01-02
          相关资源
          最近更新 更多