在此程序中,我创建了一个名为ArrayExample的类,并创建了一个随机数来填充其元素,并创建一个toString()方法。为什么我的输出为null?该代码看起来没有错误。 :
public class arran {
public static void main(String[] args) {
ArrayExample[] no1 = new ArrayExample[5];
System.out.println(Arrays.toString(no1));
}
public class ArrayExample {
int[] array;
ArrayExample(int len) {
array = new int[len];
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 100);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder(array.length);
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
}
return sb.toString();
}
}
}
您正在创建ArrayExample[5]
,它是五个ArrayExample
对象的array,而不是单个具有构造函数参数ArrayExample
的5
。看来您的意图是调用构造函数ArrayExample(int len)
,但从未调用过。
尝试此,改为:
public static void main(String[] args) {
ArrayExample no1 = new ArrayExample(5); // Invokes the constructor you wrote
System.out.println(no1.toString()); // Uses the toString method your wrote
}
将您的内部类设为静态,以便可以通过您的主要方法进行访问:
public static class ArrayExample {
并修复您的.toString()
方法:
public String toString() {
return Arrays.toString(array);
}
问题出在此代码中:
ArrayExample[] no1 = new ArrayExample[5];
System.out.println(Arrays.toString(no1));
这声明了某种类型(ArrayExample
)和一定长度(5)的数组,但是它没有做其他任何事情。第一行导致包含五个空值的变量引用no1
。这就是打印出来时看到的。
[null, null, null, null, null]
这是另一个示例,但是使用Object
突出显示该代码除了创建一个空数组和打印空值之外没有执行任何其他操作。
Object[] no2 = new Object[5];
System.out.println(Arrays.toString(no2));
此代码具有相同的输出:
[null, null, null, null, null]
这里是将初始化数组的代码(就像您已经在做的一样),然后创建ArrayExample
的新实例并将其保存在每个数组元素中。 (我也将ArrayExample
从主类定义中移出,以便对其进行编译。)>
public class Example { public static void main(String[] args) { ArrayExample[] no1 = new ArrayExample[5]; no1[0] = new ArrayExample(10); no1[1] = new ArrayExample(10); no1[2] = new ArrayExample(10); no1[3] = new ArrayExample(10); no1[4] = new ArrayExample(10); System.out.println(Arrays.toString(no1)); } } class ArrayExample { int[] array; ArrayExample(int len) { array = new int[len]; for (int i = 0; i < array.length; i++) { array[i] = (int) (Math.random() * 100); } } @Override public String toString() { StringBuilder sb = new StringBuilder(array.length); for (int i = 0; i < array.length; i++) { sb.append(array[i]); } return sb.toString(); } }
这里是运行此更新代码的输出:
[6474373150570442153, 27524825597078735826, 58127219204026904839, 90611080549351937198, 6503557163540938849]
设置数组内容的另一种方法是使用这种单线:
Arrays.setAll(no1, k -> new ArrayExample(10));