1

我有这个 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");
}
}

当我尝试运行它时,如果我在 main 中分配数组,它表示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);
    }

但这不是我想要的

4

3 回答 3

4

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

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

并这样称呼它

autoAdd(contacts);
于 2015-01-02T01:12:43.140 回答
1

当我尝试运行它时,它显示错误:“找不到符号”符号是变量contacts

这是正确的。您已声明contacts为 的局部变量main,这意味着它只能从main方法体内访问。

您的替代方案是:

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

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

  • contacts将变量声明为SlumbookDriver类的(私有)实例变量。然后你需要创建一个SlumbookDriver实例,制作autoAdd一个非静态方法等等。这将为您提供最面向对象的解决方案。

哪个最好?

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

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

于 2015-01-02T01:20:22.060 回答
0
 Slumbook[] contacts = new Slumbook[19];

在 main 方法中定义。所以它是一个方法局部变量。这意味着您无法在 main 方法之外访问它。

你能做的是

  1. 更改您的autoAdd方法以在呼叫时接受Slumbook[]并将您的联系人传递给该方法。
  2. 您还可以将联系人定义为static变量(类变量)
  3. 或者您可以更改您的autoAdd方法和联系人变量实例
于 2015-01-02T01:28:35.597 回答