我正在尝试在数组中插入一些具有相同索引的随机数,但有些东西不起作用。它说“找不到符号”。此错误与Insert和Splice相同
代码:
Scanner reader = new Scanner(System.in);
System.out.println("Quina llargada tindrà la taula? ");
int n = reader.nextInt(); //n=llargada taula
int[] taula = new int[n];
int ultims = n-21;
int fi = 100*n;
Random rand = new Random();
//int al = rand.nextInt(fi) + 0;
for (int i = 0; i < taula.length; i++)
taula[i] = rand.nextInt(fi);
Random randGromulls = new Random();
for (int g = 0; g < 10; g++) {
g++;
int k = randGromulls.nextInt(10);
int igual = k;
taula.Insert(k, igual);
//taula.splice(k, 0, igual); this does not work either
}
答案 0 :(得分:0)
使用insert
和splice
方法复制的代码用于Javascript,而不是Java。 Java数组不能改变大小。您可能希望改为使用List<Integer>
。
如果您确实需要一个数组,可以通过将数组数据移动到下一个索引来模拟插入:
System.arraycopy(array, i, array, i + 1, array.length - i - 1);
array[i] = value;
例如,当您在索引2处插入值5时,它会执行以下操作:
|0|1|2|3|4|0|0|0|
\ \ \ \ \ x
\ \ \ \ \
|0|1|2|2|3|4|0|0| System.arraycopy (shift by 1)
v
|0|1|5|2|3|4|0|0| array[2] = 5
数组的最后一个元素被删除,因为Java数组不能改变大小。您需要创建具有足够额外空间的数组来保存插入的元素。
或者,如果您不担心内存开销,可以为每个插入创建一个新数组:
int[] array2 = new int[array.length + 1];
System.arraycopy(array, 0, array2, 0, i);
System.arraycopy(array, i, array2, i + 1, array.length - i);
array2[i] = value;
array = array2; // all references must be updated to the new array!
这将为您提供一个更大的数组,但不会更改原始数组对象。