boolean exists;
public void searchProduct(Vector <Stock> temp){
Scanner sc = new Scanner (System.in);
sc.useDelimiter ("\n");
exists = false;
System.out.println ("Enter Product Name to Search for: ");
String n = sc.next();
System.out.println ();
Stock s = null;
if(temp.size() == 0)
System.out.println ("Database is Empty! Please Add a Product.");
else if (!n.matches(valn))
System.out.println ("Invalid Product.Please Try Again.");
else{
for(int i = 0; i < temp.size(); i ++){
s = temp.elementAt(i);
if(s.getName().equalsIgnoreCase(n)){
System.out.println(s.ToString());
System.out.println ("Location: " + (i + 1));
exists = true;
}
}
if(exists != true)
System.out.println ("Product Not Found!");
System.out.println ("---------------------------------------------");
}
}
public void delProduct(Vector <Stock> temp){
Scanner sc = new Scanner (System.in);
if(temp.size() == 0)
System.out.println ("Database is Empty! Please Add a Product.");
else{
sc.useDelimiter("\n");
Stock s = new Stock();
int choice = 0;
int i = 0;
boolean quit = false;
boolean valid = true;
s.searchProduct(temp);
if(exists == true){
do{
try{
System.out.println ("Enter Location of Product to delete: ");
i = sc.nextInt();
temp.removeElementAt(i-1);
System.out.println ();
System.out.println ("Product was Deleted Succesfully!");
System.out.println ("--------------------------------");
valid = false;
}catch(InputMismatchException ime){
sc.next();
System.out.println ("Invalid Location.");
}catch(ArrayIndexOutOfBoundsException a){
System.out.println ("Location does not Exist!");
}
}while(valid);
}
}
}
实际上,一切都很好。但问题是,如果用户输入了product name
以删除向量中不存在的内容,他仍然需要输入要删除的位置。 (显然,它正在做它应该做的事情)。
我已经尝试声明了在找到搜索项时设置为true的不同布尔变量,并且只有在布尔值为true时才执行删除过程,但在delete方法中变量总是为false。有什么想法吗?顺便说一句,对不起,如果我犯了愚蠢的错误,我还是Java新手。
答案 0 :(得分:1)
问题在于,当您执行s.searchProduct(temp)
时,如果找到该产品,则期望exists
为真,但事实并非如此。因为在您执行s.searchProduct(temp)
时,您正在从您调用searchProduct(temp)
的另一个Stock
对象调用方法s
。因此,如果产品存在于temp中,则exists
的{{1}}将为true,因此s
将为true。但是,你想要的是s.exists
。为此,您必须将this.exists
行替换为s.searchProduct(temp)
或this.searchProduct(temp)
。
另据我的代码了解,在searchProduct(temp)
方法中,您无需创建名为delProduct
的{{1}}对象。
此外,您还可以通过首先调用Stock
方法来执行此删除作业,该方法将返回产品的位置。如果产品不存在,则返回-1。然后,如果s
方法的结果不是-1,请在selectProduct(temp)
方法中使用返回的位置。在这种情况下,您不必费心使用布尔标志来确定何时执行操作。只是另一个想法。
答案 1 :(得分:0)
当你调用s.searchProduct(temp)时,exists应该根据是否找到而变为true或false。你确认这发生了吗?你在那里有什么valn变量?
一旦有效,您需要在删除中添加一个检查以检查是否存在,然后询问位置,否则请求更多输入(然后再次搜索)。
答案 2 :(得分:0)
您是否尝试将变量声明为volatile或者静态,以便它对整个类保持全局。但必须使用classname访问它。