将元素添加到数组java中

时间:2012-03-22 13:43:00

标签: java

这是布局

index   num 
0      [10]
1      [20]
2      [30]
 (Add 35 here)
3      [40] Move elements down
4      [50]
5      [60]
6      [70]

然后我的方法就是这个

public static void method(int[] num, int index, int addnum)
{

}

我怎么能在那里加35?

试过这个:

public static void method(int[] num, int index, int addnum)
{
int index = 10;
for(int k = num.length k>3; k++)
{
        Num[k]=num[k++]
}
    Num[3] = 35;

7 个答案:

答案 0 :(得分:5)

由于这是你应该自己完成的事情,我只提供实现它的方法,而不是代码:

如果您要将号码设置在index位置,则会覆盖之前的值。因此,您需要做的是将每个元素从index开始向阵列末尾移动一个位置:num[x]变为num[x+1]等等。

您会发现需要以相反的顺序执行此操作,否则您将使用num[index]中的值填充数组。

在此过程中,您需要决定如何处理数组的最后一个条目(num[num.length - 1]):

  • 您可以覆盖它,丢弃值
  • 您可以从功能
  • 返回
  • 如果异常为非零,则可以抛出异常
  • 您可以创建一个比当前数组大一个条目的新数组,而不是保留所有值

在此之后,您已复制num[index]:该值也会出现在num[index+1]中,因为您将其移走了。

现在可以在所需位置写入新值,而不会覆盖现有值。

修改

您的代码中有几处错误:

  • 递增 k,你需要递减它(k--,而不是k++
  • 您在循环体中再次修改k:它在每个循环中更新两次
  • 如果您从k = num.length开始,则会尝试写num[num.length + 1],这是不可能的

答案 1 :(得分:1)

你需要

  1. 分配一个新数组,其中包含一个新元素的空间。

    int[] newArray = new int[oldArray.length + 1];
    
  2. 复制所有元素,并为要插入的元素留出空间。

    for (int i = 0; i < newArray.length - 1; i++)
        newArray[i < insertIndex ? i : i + 1] = oldArray[i];
    
  3. 在空位插入35。

    newArray[insertIndex] = numberToInsert;
    

  4. 请注意,在这样的方法中可以

    public static void method(int[] num, int index, int addnum)
                  ^^^^
    

    因为无法更改num的长度。

    需要分配一个新数组,这意味着需要返回新数组:

    public static int[] method(int[] num, int index, int addnum)
                  ^^^^^
    

    然后调用这样的方法:

    myArr = method(myArr, 3, 35);
    

答案 2 :(得分:1)

非常粗暴地说,你想做这样的事情:

public static void(int[] num, int index, int addnum)
{    
    // initialize new array with size of current array plus room for new element
    int[] newArray = new int[num.length + 1]; 

    // loop until we reach point of insertion of new element
    // copy the value from the same position in old array over to
    // same position in new array
    for(int i = 0; i < index; i++)
    {
        newArray[i] = num[i]; 
    }
    i = i + 1; // move to position to insert new value

    newArray[i] = addnum; // insert the value

    // loop until you reach the length of the old array 
    while(i < num.length)
    {
        newArray[i] = num[i-1];
    }

    // finally copy last value over
    newArray[i + 1] = num[i]; 
}

答案 3 :(得分:0)

嗯,除非数组中有“额外空格”,否则你不能将所有元素[从index]一个元素向右移动,并添加35 [{{1}到相关的地方。
[实际发生的是最后一个元素被丢弃]。

然而 - 更好的解决方案可能是使用ArrayList,并使用方法myArrayList.add(index,element)

答案 4 :(得分:0)

由于这非常类似于家庭作业,你需要意识到的是你无法动态增加数组的大小。所以在你的功能中:

    public static void(int[] num, int index, int addnum)
 {   
       int[] temp = new int[num.length *2];  
       for(int i = 0; i < index; i++)  
            copy num[i] into temp[i]  
       insert addnum into temp[index]  
       fill temp with remaining num values
 } 

上面的伪代码应该让你开始。

答案 5 :(得分:0)

您正在寻找的是insertion sort

它的课堂作业,所以由你决定正确的代码。

答案 6 :(得分:0)

这个怎么样?

public class test {
public static void main(String[] arg) throws IOException
{
int[] myarray={1,2,3,5,6};//4 is missing we are going to add 4
int[] temp_myarray=myarray;//take a temp array
myarray=addElement(myarray,0);//increase length of myarray and add any value(I take 0) to the end
for(int i=0;i<myarray.length;i++)
{   if(i==3) //becaues I want to add the value 4 in 4th place
        myarray[i]=4;
    else if(i>3)
        myarray[i]=temp_myarray[i-1];
    else 
        myarray[i]=temp_myarray[i];
}
for(int i=0;i<myarray.length;i++)
    System.out.print(myarray[i]);//Print new array
}

static int[] addElement(int[] arr, int elem) {
    arr  = Arrays.copyOf(arr, arr.length + 1);
    arr[arr.length - 1] = elem;
    return arr;
}
}