如何在两个方法之间使用公共变量?

时间:2014-12-27 09:50:46

标签: java vector

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新手。

3 个答案:

答案 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访问它。