【问题标题】:How many dimensions in an array with no value数组中有多少维没有值
【发布时间】:2010-09-24 01:49:00
【问题描述】:

我有点迷茫(仍在使用 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];
        }
    }
}

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

真正感激的任何想法。

兰迪

【问题讨论】:

  • 什么语言?我将其重新标记为 Java,但它可能是 C#(我认为;我不是 C# 程序员)

标签: java arrays


【解决方案1】:

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

字符串[] 行 = 新字符串 [0];

没有元素。

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

我对你的代码的看法:

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];
        }
    }
}

【讨论】:

  • 你说得对,我的样品完全炸了。 Ron Jeffries 的结构是一个记事本类和一个文本操作类,他在本书的前半部分称之为“模型”。记事本有文本框,用数组实例化模型,并将换行符插入模型。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    lines被初始化为null,检查null或者这样初始化:

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

    【讨论】:

      【解决方案4】:

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

      如果您真的希望 Model 可以使用外部数组进行初始化,您应该为 Model 类创建一个 构造函数,它将数组作为参数。然后在构造函数的主体中,将行的值设置为该值。

      例子:

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

      用法:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2021-09-05
          • 1970-01-01
          • 2014-03-01
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多