这是布局
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;
答案 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)
你需要
分配一个新数组,其中包含一个新元素的空间。
int[] newArray = new int[oldArray.length + 1];
复制所有元素,并为要插入的元素留出空间。
for (int i = 0; i < newArray.length - 1; i++)
newArray[i < insertIndex ? i : i + 1] = oldArray[i];
在空位插入35。
newArray[insertIndex] = numberToInsert;
请注意,在这样的方法中可以不:
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;
}
}