在改组数组时遇到问题-返回null而不是随机整数

时间:2018-09-19 05:23:04

标签: java arrays sorting random shuffle

TAG POS=1 TYPE=INPUT:FILE FORM=CLASS:mainform ATTR=NAME:image-file-upload CONTENT=C:\Users\Bob<SP>M\Downloads\1.png
WAIT SECONDS=5

TAG POS=1 TYPE=INPUT:FILE FORM=CLASS:extraForm ATTR=NAME:image-file-upload CONTENT=C:\Users\Bob<SP>M\Downloads\2.png
WAIT SECONDS=5

TAG POS=1 TYPE=INPUT:FILE FORM=CLASS:extraForm ATTR=NAME:image-file-upload CONTENT=C:\Users\Bob<SP>M\Downloads\3.png
WAIT SECONDS=5

TAG POS=1 TYPE=INPUT:FILE FORM=CLASS:extraForm ATTR=NAME:image-file-upload CONTENT=C:\Users\Bob<SP>M\Downloads\4.png
WAIT SECONDS=5

TAG POS=1 TYPE=INPUT:FILE FORM=CLASS:extraForm ATTR=NAME:image-file-upload CONTENT=C:\Users\Bob<SP>M\Downloads\5.png
WAIT SECONDS=5 

打印变量private static <T> void shuffle(T[] array){ if(array==null || array.length < 2){ return; } for(int i=1;i<array.length;i++){ int a = rng.nextInt(i+1); System.out.println(a); T temp = array[a]; System.out.println(temp); array[a] = array[i]; array[i] = temp; } } static boolean checkSorted(ISort sorter, int size) { Integer[] data = new Integer[size]; shuffle(data); } a时的输出:

temp

我不确定0 null 2 null 0 null 2 null 0 null 4 null 7 null 8 null 6 为什么是 null 而不是 Integer 。有人可以向我解释吗?我应该如何修改此代码才能使其正常工作?

2 个答案:

答案 0 :(得分:1)

Integer[] data = new Integer[size];是一个整数数组,但在分配前,要打印的数组中的所有成员均为空。首先正确初始化数组:

Integer[] array = new Integer[5];
array[0]= new Integer(0);
array[1]= new Integer(1);

答案 1 :(得分:0)

在Java中,每个变量都有一个类型。当您声明变量而不指定值时,默认情况下它将具有预定义的值。如果它是包含对 Object 的引用的变量(换句话说,是composite type的变量),则其值为 null 。另一方面,如果它是primitive type的变量,则根据其类型将具有不同的值(数字的默认值为0)。有关更多详细信息,请参见下表。

Table with the default values for variables of different types

(图片来自Java文档,here


考虑到这一点,我们现在可以继续执行您的代码行为。当创建类型为Integer的数组时,默认情况下其所有元素均为 null 。请注意,Integer对象包装器类(请参见type wrappers),而int原始类型。如果您创建了int类型的数组,则其所有元素默认情况下的值为 0 。这就是为什么在打印temp null 而不是数字时的原因。为了解决这个问题,您可以为数组的元素分配值,如下所示:

Integer[] data = new Integer[size];

Random random = new Random();
for(Integer i: data) {
    i = random.nextInt(100); //assign a random value between 0 to 99
}