在类级别声明一个长度未知的数组

时间:2019-07-12 15:41:54

标签: java

因此,我在类的顶部声明了一个对象数组,如下所示:

public class MyClass
{
Object[] myObjectArrray;
}

所以我在这里有两种方法:

public void method1
{
//Read from textfile into a dynamic array list
//Place data from arrayList into original array
}

public void method2
{
//do stuff with the array
}

我的问题是,由于我没有为对象数组声明固定长度,所以会遇到各种空错误。不知道如何在第一个方法中确定的类级别上设置长度。

arraylist和objectArray的声明的更详细的代码:

public  void readDestinationInfo(Scanner fileScanner) 
while(fileScanner.hasNext())
        {
           String line = fileScanner.next();
           test = line.split(";|\\-");


           //Loop to insert data from text-file into array 
           destinationList.add(new Destination(test[0], Integer.valueOf(test[1]), Integer.valueOf(test[2]), Integer.valueOf(test[3]), Integer.parseInt(test[4]), Integer.parseInt(test[5])));


    }

在文本文件中没有行之后,我创建了对象数组:

Destination[] destinationArray = new Destination[destinationList.size()];

然后是循环以填充此数组:

for(int i = 0; i < destinationList.size(); i++)
        { 
           destinationArray = (Destination[]) destinationList.toArray(new Destination[destinationList.size()]);
        }

在执行此步骤后,我可以打印出该数组中包含值的信息,所以我知道这不是问题……希望

然后使用第二种方法填充另一个数组:

 public String[] getDestinationNames()
  {
    String[] cityNames = new String[destinationArray.length];
    if(destinationArray == null)
    {

      System.out.println("TESt");
    }

    //System.out.println(cityNames.length);
    return cityNames; 
  }

当尝试使用这种方法进行操作时,我会遇到“找不到此符号”的情况

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不需要使用长度初始化数组。

您可以简单地调用.toArray()方法。并且,由于您希望数组在方法内部是全局的且可见的,因此您将声明数组为静态。请记住,调用静态变量的方法也应该是静态的。像这样:

public class MyClass {
    static Object[] myObjectArrray;

    public static void method1() {
        // Read from textfile into a dynamic array list
        // Place data from arrayList into original array
        myObjectArrray = arrayList.toArray();
    }

    public static void method2() {
         // to avoid null pointer exception
         if (myObjectArrray != null) {
             // do stuff with the array
         } else {
             // do something. maybe call method1?
         }
    }
}

另一种方法是使用“ this”关键字。在这里,您不必声明任何静态内容。

public class MyClass {
    Object[] myObjectArrray;

    public void method1() {
        // Read from textfile into a dynamic array list
        // Place data from arrayList into original array
        this.myObjectArrray = arrayList.toArray();
    }

    public void method2() {
        // to avoid null pointer exception
        if (myObjectArrray != null) {
            // do stuff with the array
        } else {
            // do something. maybe call method1?
        }
    }
}

编辑:完整运行Java代码

public class Sample {

    public static void main(String[] a) {
        Sample s = new Sample();
        s.method1();
        s.method2();
    }

    Object[] myObjectArrray;

    public void method1() {
        // Read from textfile into a dynamic array list
        // Place data from arrayList into original array
        List<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");
        myObjectArrray = arrayList.toArray();
    }

    public void method2() {
        // to avoid null pointer exception
        if (myObjectArrray != null) {
            // do stuff with the array
            System.out.println(myObjectArrray.length);
        } else {
            // do something. maybe call method1?
        }
    }
}

希望这会有所帮助。祝你好运。