2

此功能应该在所选索引处添加一个元素并将数组元素中的所有其他元素向下推。因此,例如,假设我有以下数组:

[0] = zero
[1] = one
[2] = two

如果我在索引 0 处添加另一个名为 NEWZERO 的元素,则数组必须如下所示:

[0] = NEWZERO
[1] = zero 
[2] = one 
[3] = two

但目前我收到 IndexOutOfBounds 异常,它不起作用。

PS 我不想使用内置的 ArrayList 库,它会自动为您完成。

    public void insert(int i, String s) {

    if (array[i] == null) {
        array[i] = s; //Need to add feature that instantly puts the element at the first available spot on the list.
    } else { 
        for (int j = i; j < array.length; j++) { //Can't use >= i
            array[j + 1] = array[j];

            if (j == array.length - 1) { 
                break;
            } 
        }
        array[i] = s;
4

3 回答 3

3

试试这个

public void insert(int i, String s) {

    String[] newArr = new String[array.length + 1];
    for (int j = 0; j < array.length; j++) { 
        if(j < i){
           newArr[j] = array[j];
        } else if(j == i){ // '==' insted of '='
           newArr[j] = s;
        } else {
           newArr[j+1] = array[i];
        }
    }

    array = newArr;
}
于 2013-11-13T14:35:24.520 回答
1

好吧,数组不是动态的,所以如果你有一个大小为 3 的数组,你不能向它添加任何东西,除非你创建一个大小为 oldArray.length+1 的新数组,然后用新数据填充它。

于 2013-11-13T14:29:40.757 回答
0
public static int[] addAtIndex(int[] a, int index, int value) {
 int[] newArr = new int[a.length + 1];
 int temp;
 for (int j = 0; j < a.length + 1; j++) {
  if (j < index) {
   newArr[j] = a[j];
  } else if (j == index) {
   //copy value at index to temp so that value added at specific index can be shifted right
   temp = a[j];
   newArr[j] = value;
   newArr[j + 1] = temp;
  } else {
   newArr[j] = a[index];
   index++;
  }
 }
 return newArr;
}
于 2019-02-16T16:05:40.093 回答