java

时间:2017-06-06 15:02:47

标签: java arrays random insert splice

我正在尝试在数组中插入一些具有相同索引的随机数,但有些东西不起作用。它说“找不到符号”。此错误与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

   }

1 个答案:

答案 0 :(得分:0)

使用insertsplice方法复制的代码用于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!

这将为您提供一个更大的数组,但不会更改原始数组对象。