您不能引用ArrayList
其索引不在 bounds 中的元素[0, size() - 1]
。创建ArrayList
viaArrayList()
会创建一个 size 列表0
。要将元素添加到此数组,您必须调用添加元素的方法之一,例如add()
。您的第一个电话是 to get()
,但列表有大小0
,所以甚至get(0)
会导致IndexOutOfBoundsException
.
做什么取决于列表的预期内容。在您的情况下,我建议编写一个辅助函数,该函数在不包括指定数字的范围内生成一个随机数。您可以在一个简单的循环中使用该函数来生成整个列表,将前一个元素传递给提到的辅助函数。
例子:
public static int randomInRange(int a, int b) {
return (int)(Math.random() * (b - a + 1));
}
public static int randomInRangeExcluding(int a, int b, int excluding) {
int result = (int)(Math.random() * (b - a));
if (result == excluding) {
result++;
}
return result;
}
public static List<Integer> generateRandomList(int size) {
ArrayList<Integer> result = new ArrayList<Integer>();
for (int j = 0; j <= size; j++) {
if (j > 0) {
result.add(randomInRangeExcluding(0, size - 1, result.get(j - 1)));
} else {
result.add(randomInRange(0, size - 1));
}
}
return result;
}
并使用以下方法获取值:
generateRandomList(100);
调用它会产生一个随机整数列表,其中没有两个连续元素相等:
[27, 34, 53, 92, 56, 93, 21, 22, 45, 95, 48, 25, 18, 26, 54, 1, 82, 26, 5, 62, 84, 23, 8, 84, 25, 0, 36, 37, 54, 95, 4, 26, 65, 53, 81, 16, 47, 56, 73, 46, 60, 50, 37, 89, 61, 84, 23, 79, 47, 87, 68, 49, 15, 17, 55, 71, 17, 55, 71, 51, 67, 33, 80, 47, 81, 24, 10, 41, 76, 60, 12, 17, 96, 43, 57, 55, 41, 56, 21, 85, 98, 40, 9, 39, 53, 28, 93, 70, 89, 80, 40, 41, 30, 81, 33, 53, 73, 28, 38, 87, 29]