java - 如何在两个方法之间拥有公共(public)变量?

标签 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); 
        }
    }
}

事实上,一切都运行得很好。但问题是,如果用户输入 vector 中不存在的要删除的产品名称,他仍然需要输入要删除的位置。 (显然,它正在做它应该做的事情)。 我尝试声明不同的 boolean 变量,如果找到搜索项,这些变量设置为 true,并且仅当 boolean 值为 true 时才执行删除过程,但不知何故,该变量在删除方法中始终为 false。有什么想法吗?顺便说一句,如果我犯了一些愚蠢的错误,我很抱歉,我对 Java 还是个新手。

最佳答案

问题是,当你这样做 s.searchProduct(temp) 时你期待的是exists如果产品被发现但事实并非如此,则为真。因为当你在做s.searchProduct(temp)时,您正在调用方法 searchProduct(temp)来自另一个Stock您调用的对象 s 。因此,如果产品存在于 temp 中,则 existss是真的,所以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/

相关文章:

c++ - 从 char * 中的整数填充 vector<int>

algorithm - 平均矢量图像以获得中间图像

java - 如何解决这个错误: Android resource linking failed?

java - 映射 ifPresent 函数

Java哈希表或 HashMap ?

java - 如何在序列化中获得相同的引用?

java - 如何使用 Spring 安全性和 Restful Web 服务验证数据库中的凭据?

vector - 在 Rust 枚举/结构中接受 slice 和 Vec

java - 哪里写 '{'或者i++;否则会产生以下结果?

c++ - 使用 vector C++