在java中找不到符号变量

时间:2015-01-02 01:09:39

标签: java variables cannot-find-symbol

我有这个Java代码

public class SlumbookDriver{
public static void main(String args[]){
    Slumbook[] contacts = new Slumbook[19];
    autoAdd();
    String con1 = contacts[0].viewToString();
    System.out.println(con1);
    }

使用方法autoAdd就像这样

public static void autoAdd(){
   contacts[0] = new Slumbook("2014-0002", "Karl Marx", "Karly", "German", "Cologne",  
"House", "2358681", "Single", "N/A", "Karl_Marx@yahoo.com");
 contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban",   
"Cuba", "Lungon", "7863264", "Married", "Dead", "FidelCatro@msn.com");
}
}

当我尝试运行它时,它表示error: Cannot find Symbol符号为variable contacts,如果我在主内部分配数组,则代码正常工作,如下所示:

public class SlumbookDriver{
    public static void main(String args[]){
        Slumbook[] contacts = new Slumbook[19];
        contacts[0] = new Slumbook("2014-0002", "Karl Marx", "Karly", "German", "Cologne", 
        "House", "2358681", "Single", "N/A", "Karl_Marx@yahoo.com");
        contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban", "Cuba", "Lungon", "7863264", "Married", "Dead", "FidelCatro@msn.com");
        String con1 = contacts[0].viewToString();
        System.out.println(con1);
    }

但那不是我想要的

3 个答案:

答案 0 :(得分:4)

联系人不在方法autoAdd()的范围内。您应该将其作为参数传递:

public static void autoAdd(Slumbook[] contacts){//body};

并称之为

autoAdd(contacts);

答案 1 :(得分:1)

  

当我尝试运行它时,它说错误:"找不到符号"符号是变量contacts

那是对的。您已将contacts声明为main的局部变量,这意味着它只能在main方法的正文中进行访问。

您的替代方案是:

  • contacts引用传递给autoAdd方法作为参数。

  • contacts变量声明为static类的(私有)SlumbookDriver变量。这可能是最简单的,但这意味着只有一个"联系人列表"在你的应用程序中。

  • contacts变量声明为SlumbookDriver类的(私有)实例变量。然后,您需要创建SlumbookDriver实例,使autoAdd成为非静态方法,依此类推。这将为您提供最面向对象的解决方案。

哪个最好?

  • 对于小型应用程序(比如一百行左右的代码),它几乎没有什么实际意义。文体考虑是另一回事......但我会留给你的老师解释。

  • 对于更大的应用程序,由于各种原因,第三种选择是最好的。例如,使用静态的代码在较大的应用程序中更难重用(例如嵌入),并且更难以测试。此外,它使继承和多态性,以及其他Java语言功能更难以有效使用。

答案 2 :(得分:0)

 Slumbook[] contacts = new Slumbook[19];

是在main方法中定义的。所以它是方法本地变量。这意味着您无法在主方法之外访问它。

你可以做的是

  1. 将您的autoAdd方法更改为接受Slumbook[],并在致电时将您的联系人传递给该联系人。
  2. 您还可以将联系人定义为static变量(类变量)
  3. 或者您可以更改autoAdd方法和联系人varaibles实例