在java中找不到符号变量

问题描述 投票:1回答:3

我有这个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", "[email protected]");
 contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban",   
"Cuba", "Lungon", "7863264", "Married", "Dead", "[email protected]");
}
}

当我尝试运行它时,它说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", "[email protected]");
        contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban", "Cuba", "Lungon", "7863264", "Married", "Dead", "[email protected]");
        String con1 = contacts[0].viewToString();
        System.out.println(con1);
    }

但那不是我想要的

java variables cannot-find-symbol
3个回答
4
投票

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

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

并称之为

autoAdd(contacts);

1
投票

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

那就对了。您已将contacts声明为main的局部变量,这意味着它只能从main方法的主体内访问。

您的替代方案是:

  • contacts引用传递给autoAdd方法作为参数。
  • contacts变量声明为static类的(私有)SlumbookDriver变量。这可能是最简单的,但这意味着您的应用中只有一个“联系人列表”。
  • contacts变量声明为SlumbookDriver类的(私有)实例变量。然后你需要创建一个SlumbookDriver实例,使autoAdd成为非静态方法,依此类推。这将为您提供最面向对象的解决方案。

哪个最好?

  • 对于一个小应用程序(比如一百行左右的代码),它几乎没有什么实际意义。文体考虑是另一回事......但我会留给你的老师解释。
  • 对于更大的应用,由于各种原因,第三种替代方案是最好的。例如,使用静态的代码在较大的应用程序中更难重用(例如嵌入),并且更难以测试。此外,它使继承和多态性,以及其他Java语言功能更难以有效使用。

0
投票
 Slumbook[] contacts = new Slumbook[19];

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

你能做的是

  1. 更改你的autoAdd方法接受Slumbook[]并在通话时将你的联系人传递给你。
  2. 您还可以将联系人定义为static变量(类变量)
  3. 或者你可以改变你的qazxsw poi方法和联系人变量实例
© www.soinside.com 2019 - 2024. All rights reserved.