1

我已经将此代码作为课堂作业开始。我们要建立一个类来创建一个对象数组。我们应该有两个构造函数,因此可以使用给定大小或默认大小 100 来初始化数组。这是我到目前为止所拥有的

public class Set {

    private int maxObjects;
    private int sz;

    public Set(int maxObjects) {
        this.maxObjects = maxObjects;
        this.sz = maxObjects;
        Object[] a = new Object[maxObjects];
    }

    public Set() {
        this.maxObjects = 100;
        this.sz = 100;
        Object[] a = new Object[100];
    }

    public void add(Object object) {
        a[0] = Object;
    }

我遇到的问题是它没有被a视为方法中的变量add()。此外,数组应该用设定的容量初始化,但为空,我不知道该怎么做。

4

4 回答 4

4

您应该定义a与定义 maxObjects 和 sz 相同的位置。

private Object[] a;

然后把它放在你的构造函数中:

a = new Object[maxObjects];

阅读有关变量范围的信息

于 2012-09-26T02:42:45.070 回答
2

您非常接近正确。您遇到的问题与变量的范围有关。检查更接近变量 a 的范围。

此外,您的 add 方法中有错字。

a[0] = Object 

应该

a[0] = object 

(带小写 o)

于 2012-09-26T02:42:42.573 回答
1

它没有被视为方法a中的变量add()

你的问题是在构造函数a声明Set的,所以它是构造函数的本地的。这意味着它不能在构造函数之外使用(例如从add方法中)。

解决方案非常简单。a用您的其他字段声明:

public class Set {

    private int maxObjects;
    private int sz;
    private Object[] a;

    public Set(int maxObjects) {
        this.maxObjects = maxObjects;
        this.sz = maxObjects;
        this.a = new Object[maxObjects];
    }

    public Set() {
        this.maxObjects = 100;
        this.sz = 100;
        this.a = new Object[100];
    }

    public void add(Object object) {
        a[0] = object;
    }
}

我建议阅读 Java 中的作用域(一个简单的谷歌搜索会在那里产生帮助)。

此外,数组应该使用设定的容量进行初始化,但为空。

这是默认完成的。对于任何非原始类型的数组,数组的元素都被初始化为null. 这里,一个全null数组本质上是一个空数组。呼叫new Object[capacity]正在为您执行此操作。

于 2012-09-26T02:46:34.150 回答
1

几件事:

  • a应该是一个字段
  • 您的默认构造函数应该调用另一个构造函数
  • 错字

试试这个:

public class Set {

    private int maxObjects;
    private int sz;
    private Object[] a;

    public Set(int maxObjects) {
        this.maxObjects = maxObjects;
        this.sz = maxObjects;
        a = new Object[maxObjects];
    }

    public Set() {
        this(100);  // fyi, this is the syntax for calling another constuctor
    }

    public void add(Object object) {
        a[0] = object;
    }
}
于 2012-09-26T02:46:45.103 回答