我正在做一个基于库存控制系统的学校项目。我希望产品将产品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新手,对任何愚蠢的错误都很抱歉! 我已经逐步完成了这一步,似乎无法找到我的逻辑错误的地方!
此外,有没有更好的方法来实现这个?
答案 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
和其他值