如何检查用户定义的输入在Object类型的向量中是否唯一?

时间:2014-12-30 12:26:43

标签: java vector unique primary-key

我正在做一个基于库存控制系统的学校项目。我希望产品将产品ID作为主键。在输入产品ID后,我想遍历向量以检查该id是否已经存在;如果是这种情况,则提示用户输入新的唯一ID。我写了以下代码:

String chkpid = "[0-9]{4}[P]";
valid = false;
                matchid = false;
                do{
                    System.out.println("Enter Product ID (4-digit code followed by the Letter P): ");
                    pid = sc.next();
                    if(pid.matches(chkpid)){
                        for(int i = 0; i < temp.size(); i ++){
                            st = temp.elementAt(i);
                            if(pid.equals(st.getPid()))
                                matchid = true;
                            else
                                matchid = false;
                        }
                        if(matchid == true){
                            valid = false;
                            System.out.println ("Product ID already in use. Please Enter an uncommon ID.");
                        }else
                            valid = true;
                    }else
                        System.out.println ("Invalid Product ID Format.");
                }while(valid != true);

                Stock s1 = new Stock(name, qty, cost, pid);
                temp.add(s1);
                added = true;
                System.out.println ("Product was Added Succesfully!");
                System.out.println ();
            }

这似乎工作正常,但我注意到它只会阻止用户输入与前一个元素相同的id。例如,如果向量中有2个具有不同id的产品,并且用户正在输入与第1个元素具有相同id的新产品,则会接受该产品并将其添加到向量中(这显然是错误的!) 。但是,如果输入id等于第二个元素的id,则提示用户输入一个新元素(从而执行它应该执行的操作)。我怎样才能解决这个问题? P.S我是java新手,对任何愚蠢的错误都很抱歉! 我已经逐步完成了这一步,似乎无法找到我的逻辑错误的地方!

此外,有没有更好的方法来实现这个?

1 个答案:

答案 0 :(得分:0)

试试这个

for(int i = 0; i < temp.size() && matchid == false; i ++){
      st = temp.elementAt(i);
      if(pid.equals(st.getPid()))
           matchid = true;
       else
           matchid = false;
}

当你找到一个类似的id来保持你的布尔匹配的正确值时,你需要停止循环

为了更好地实施,请检查Vector.contains(Object o)。但是您需要使用新的pid创建一个Stock对象来比较两个Stock对象

编辑:

public static void main(String[] main){
    int valueToCheck = 85;

    Vector<Integer> list = new Vector<Integer>();

    list.add(5);
    list.add(15);
    list.add(85);
    list.add(1);
    list.add(145);

    boolean matchid = false;
    int i = 0;
    while (i < list.size() && matchid == false){
          if(list.elementAt(i) == valueToCheck)
               matchid = true;
           else
               matchid = false;

          ++i;
    }

    System.out.println(i + " : " + matchid);
}

我的输出是3 : true,这意味着当我找到值85时我退出循环 和5 : false和其他值