我在做一个学校项目。我希望用户订购产品,显示订单审核,然后选择是否要确认或拒绝订单。但是,该程序停留在无限循环中。我知道这与变量valid
有关,但我不知道为什么因为我为了停止循环而宣布它为true
。如果我删除了确认部分,那么一切正常。我的逻辑正确吗?
public void selectOrder(Vector <Stock> temp){
sc.useDelimiter("\n");
String conf = "[YyNn]";
String exit = "[e][x][i][t]";
valid = false;
out = false;
confirm = false;
do{
System.out.println("Enter Product ID to Order: (Type exit to Quit)");
pid = sc.next();
if(pid.matches(chkpid)){
out = false;
for(int i = 0; i < temp.size(); i ++){
s = temp.elementAt(i);
if(pid.equals(s.getPid())){
l = i;
found = true;
break;
}else
found = false;
}
v = true;
do{
try{
System.out.println ("Please Enter Quantity to Order: ");
q = sc.nextInt();
v = false;
}catch(InputMismatchException ime){
sc.next();
System.out.println ("Invalid Input. Try Again.");
}
}while(v);
if(found == true){
oldQty = temp.elementAt(l).getQuantity();
originalQty = Integer.parseInt(oldQty);
afterQty = originalQty - q;
cst = temp.elementAt(l).getCost();
cost = Integer.parseInt(cst);
System.out.println();
System.out.println ("-------------Order Review-------------");
System.out.println ("Product Name: " + temp.elementAt(l).getName());
System.out.println ("Quantity: " + q);
System.out.println ("Price Preview(excluding tax): €" + (cost * q));
System.out.println ("--------------------------------------");
System.out.println();
do{
System.out.println ("Confirm Order? (Y/N)");
con = sc.next();
}while(!(con.matches(conf)));
if(con.equals("y") && con.equals("Y")){
if((originalQty > 0) && (afterQty >= 0)){
String newQty = Integer.toString(afterQty);
temp.elementAt(l).setQuantity(newQty);
System.out.println ("Order Successfull.");
valid = true;
}else if(originalQty <= 0){
System.out.println ("Product is Currently out of Stock!");
valid = false;
}else if(afterQty < 0){
System.out.println ("Quantity exceeds Stock Available!");
valid = false;
}
}
}else{
System.out.println ("Product ID Not Found!");
valid = false;
}
}else if (!(pid.matches(chkpid)) && !(pid.matches(exit))){
System.out.println ("Invalid Product ID Format.");
valid = false;
}
if(pid.matches(exit))
out = true;
}while((valid != true) && !(pid.matches(exit)));
System.out.println();
}
您正在调试吗?代码在哪里? – boctulus
@Boctulus不,我仍然是一个初学者在java中,不太清楚如何调试。 –
你可以粘贴你的输出打印语句吗? – SMA