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);
}
}
}
事实上,一切都运行得很好。但问题是,如果用户输入 vector 中不存在的要删除的产品名称
,他仍然需要输入要删除的位置。 (显然,它正在做它应该做的事情)。
我尝试声明不同的 boolean 变量,如果找到搜索项,这些变量设置为 true,并且仅当 boolean 值为 true 时才执行删除过程,但不知何故,该变量在删除方法中始终为 false。有什么想法吗?顺便说一句,如果我犯了一些愚蠢的错误,我很抱歉,我对 Java 还是个新手。
最佳答案
问题是,当你这样做 s.searchProduct(temp)
时你期待的是exists
如果产品被发现但事实并非如此,则为真。因为当你在做s.searchProduct(temp)
时,您正在调用方法 searchProduct(temp)
来自另一个Stock
您调用的对象 s
。因此,如果产品存在于 temp 中,则 exists
的s
是真的,所以s.exists
将会是真的。然而,你想要的真实的是this.exists
。为此,您必须替换 s.searchProduct(temp)
符合this.searchProduct(temp)
或searchProduct(temp)
.
据我从您的代码中了解到,在delProduct
中您不需要创建 Stock
的方法您调用的对象 s
.
此外,您还可以通过首先调用selectProduct(temp)
来完成此删除工作。方法将返回产品的位置。如果产品不存在,则返回-1。那么,如果searchProduct(temp)
的结果方法不为-1,则使用 deleteProduct(temp)
中返回的位置方法。在这种情况下,您无需费心使用 boolean 标志来确定何时执行操作。只是另一个想法。
祝你好运。
关于java - 如何在两个方法之间拥有公共(public)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27666109/