如何调用使用潜在未初始化数组作为参数的方法?

时间:2014-10-10 05:58:13

标签: java arrays eclipse methods parameters

我正在编写一个将文本文件读入并行数组的程序,然后允许用户请求将符合条件的条目打印到单独的文件中。我在代码的开头声明了这些数组,但是直到稍后才对它们进行初始化,因为它们的长度依赖于从文件中提取的数据。

我现在正在尝试编写将过滤结果打印到文件的方法,但是eclipse告诉我我不能将它们作为参数传递,因为它们没有被初始化。但它们是在一个循环中初始化的。我不能提前初始化它们,因为程序还不知道所需的长度。

代码的相关位

            filterLocation(time, longitude, magnitude, latitude, location, description, entries);

当我尝试从main方法调用方法

时出现错误
public static void filterLocation (String[] time, 
                                    double[] latitude,
                                    double[] longitude,
                                    double[] magnitude,
                                    String[] location,
                                    String[] description,
                                    int entries )

我正在尝试编写的方法,其中eclipse没有检测到任何错误。

    String[] time;
    double[] latitude;
    double[] longitude;
    double[] magnitude;
    String[] location;
    String[] description;

声明变量的地方,就在public static void main ...

if(entries!=0){
                    time = new String[entries];
                    latitude = new double[entries];
                    longitude = new double[entries];
                    magnitude = new double[entries];
                    location = new String[entries];
                    description = new String[entries];

初始化它们,嵌套在while循环中,if语句和try块

2 个答案:

答案 0 :(得分:1)

初始化调用filterLocation的方法中的变量。好像你没有在那里初始化变量。

修改

您的代码中存在条件

 if(entries!=0){

阻止初始化。编译器指出条件如果条目= 0怎么办?那条件不符合。

您也应该遇到这种情况,以避免编译错误。

请参阅下面的虚拟代码。

public static void main(String [] args){

    int a;
    if (args != null) {
        a = 10;
    } else {
        a = 11;
    }
    sampleMethod(a);

}

public static void sampleMethod(int a) {
    // TODO Auto-generated method stub

}

删除else条件,并查看编译错误。

希望你能理解这个问题。

修改

或者在条件本身内调用方法。见虚拟代码。

public static void main(String[] args) {

    int a;
    if (args != null) {
        a = 10;
        sampleMethod(a);
    }

}

public static void sampleMethod(int a) {
    // TODO Auto-generated method stub

}

修改

或者变量应该在班级。

public class TestMethod {
private int a;

public static void main(String[] args) {
    TestMethod method = new TestMethod();
    method.wrapperMethod(args);

}

public void wrapperMethod(String[] args) {
    if (args != null) {
        a = 10;
    }
    sampleMethod(a);
}

public static void sampleMethod(int a) {
    // TODO Auto-generated method stub

}

引自java spec

  

将每个方法参数(第8.4.1节)初始化为相应的参数   参数值由方法的调用者提供(第15.12节)。

     

必须明确赋予局部变量(§14.4,§14.14)一个值   在使用之前,通过初始化(§14.4)或赋值   (§15.26),可以使用明确规则进行验证   任务(§16)。

答案 1 :(得分:0)

问题是if条件:

if(entries!=0){

如果entries为零,则永远不会初始化数组。这就是编译器所抱怨的。

最简单的解决方法是在保留初始化的同时删除if

                time = new String[entries];
                latitude = new double[entries];
                ...

在Java中分配零大小的数组非常好。有关讨论,请参阅Why does Java allow arrays of size 0?

为了使代码更紧凑,您甚至可以将声明与初始化合并:

String[] time = new String[entries];
double[] latitude = new double[entries];
...