数组中没有值的维数

时间:2008-11-26 00:01:14

标签: java arrays

我有点失落(仍在与Ron Jeffries的书合作)。这是一个简单的课程:

public class Model{
    private String[] lines;

    public void myMethod(){
        String[] newLines = new String[lines.length + 2];
        for (i = 0, i <= lines.length, i++) {
            newLines[i] = lines[i];
        }
    }
}

我有另一个类,通过设置Model来初始化myModel = new String[0]和一个空数组。当我调用myModel.myMethod()时,我得到一个超出范围错误的下标。看一下调试器,我看到myModel.lines的维度为零,长度为零。它的尺寸和长度不应该是1吗?当然lines[0]的值是null,但数组本身不应该是,如果它?

任何想法真的很感激。

兰迪

5 个答案:

答案 0 :(得分:1)

行将为null,因此lines.length将引发异常。

我相信你的其他类初始化“模型”将无济于事,因为Lines本身是私有的。事实上,无论你对Model做什么,在至少30个州都可能是非法的。

答案 1 :(得分:1)

行被初始化为null,检查null或以这种方式初始化它:

private String[] lines = new String[0];

答案 2 :(得分:1)

您不能通过将Model设置为String数组来初始化Model的实例。我真的很惊讶编译器会让你尝试。

如果你真的想要使用外部数组初始化Model,你应该为Model类创建一个 Constructor ,它将把数组作为参数。然后在构造函数的主体中,将行的值设置为该值。

示例:

public class Model {
    private String []lines;

    public Model(String [] inLines)
       {
       lines = inLines;
       }
}

用法:

myStringArray = new String[0];
myModel = new Model(myStringArray);

答案 3 :(得分:1)

我认为您的示例可能与您基于描述的实际代码不同。我认为问题是数组是从零开始的,因此数组初始化为:

string [] lines = new string [0];

没有元素。

您需要更改循环,以便检查索引是否严格小于数组的长度。正如其他人所指出的那样,在尝试引用它之前,你还需要确保数组本身不为null。

我对你的代码的看法:

public class Model{
    private String[] lines = new string[0];

    public Model( string[] lines ) {
        this.lines = lines;
    }

    public void myMethod(){
        int len = 2;
        if (lines != null) {
            len = len + lines.length;
        }
        String[] newLines = new String[len];
        for (i = 0, i < lines.length, i++) {
            newLines[i] = lines[i];
        }
    }
}

答案 4 :(得分:0)

看看我的回答here - 我认为这将为您提供有关Java和C / C ++中数组初始化之间差异的背景知识。