2 回答

TA贡献1875条经验 获得超5个赞
您不是在创建新的数组类型,而是在创建一个包含数组的类。因此PrimitiveArray intArray[],又名 a PrimitiveArray[],并不完全是您想要的。它只是一个普通的PrimitiveArray,它已经表示包含数组字段的东西。
public class PrimitiveArray {
int[] internal; //this data should be accessed through a method, encapsulation
public PrimitiveArray(int amount) {
this.internal = new int[amount];
}
}
public class Main {
public static void main(String[] args) {
Random rand = new Random();
PrimitiveArray intArray = new PrimitiveArray(5);
//this may do well in the constructor, which you can pass your random to
for (int i = 0; i < intArray.internal.length; i++){
intArray.internal[i] = rand.nextInt();
}
}
}

TA贡献2080条经验 获得超4个赞
让我们从 开始PrimitiveArray,有一个intArray字段对同一包的成员可见(这有点奇怪);通常你会做到的private。你还没有给出PrimitiveArray一个length字段。您需要访问和更改intArray. 然后,我相信您可能会发现覆盖toString()是输出值的简单方法。就像是,
public class PrimitiveArray {
private int[] intArray;
public int length;
public PrimitiveArray(int amount) {
this.length = amount;
this.intArray = new int[amount];
}
public void set(int i, int v) {
if (i >= 0 && i < length) {
this.intArray[i] = v;
}
}
public int get(int i) {
if (i >= 0 && i < length) {
return this.intArray[i];
}
return -1;
}
public String toString() {
return Arrays.toString(intArray);
}
}
最后,在调用它时;你不需要一个PrimitiveArray(s) 数组,并且需要使用类似上面的getandset方法(因为 Java 没有运算符重载)。就像是,
public static void main(String[] args) {
Random rand = new Random();
PrimitiveArray intArray = new PrimitiveArray(5);
for (int i = 0; i < intArray.length; i++) {
intArray.set(i, rand.nextInt());
}
System.out.println(intArray);
}
PS,正如@Tom在评论中指出的那样,尽管我最初这样做是为了满足您的原始代码;length不应该是一个public字段,也应该通过方法来访问。喜欢,
public class PrimitiveArray {
private int[] intArray;
public int length() {
return intArray.length;
}
和
for (int i = 0; i < intArray.length(); i++) {
添加回答
举报