java数字随机化器的输出为null

ecr0jaav  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(434)

在这个程序中,我创建了一个名为 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();
        }
    }
}
pu82cl6c

pu82cl6c1#

问题出在以下代码中:

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 {
    // use same class contents as your original post
}

以下是运行此更新代码的输出:

[6474373150570442153, 27524825597078735826, 58127219204026904839, 90611080549351937198, 6503557163540938849]

设置数组内容的另一个选项是使用以下一行:

Arrays.setAll(no1, k -> new ArrayExample(10));
hi3rlvi2

hi3rlvi22#

你在创造 ArrayExample[5] ,这是一个5的数组 ArrayExample 对象,而不是一个 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);
  }

相关问题