Java 如何覆盖数组中的位置?
我有一个方法,它使用具有特定数量的局部的数组。我要求用户输入要开始覆盖的位置号。我的对象数组在局部中有其他对象。我不确定我对j变量所做的是否正确。以下是我在局部移动对象的方法Java 如何覆盖数组中的位置?,java,arrays,Java,Arrays,我有一个方法,它使用具有特定数量的局部的数组。我要求用户输入要开始覆盖的位置号。我的对象数组在局部中有其他对象。我不确定我对j变量所做的是否正确。以下是我在局部移动对象的方法 public void overwriteArray(int number) { for (int i=0; i<array.length ; i++) { if (i ==(number-1) { for(int j = i ; j<array.length ; j++) {
public void overwriteArray(int number) {
for (int i=0; i<array.length ; i++) {
if (i ==(number-1) {
for(int j = i ; j<array.length ; j++) {
array[j] = array[j+1];
}
}
}
}
public void overwriteArray(整数){
对于(int i=0;i您的外循环在孔阵列上迭代,并且仅当i==(number-1)
时才执行内循环,因此迭代的array.length-1
是免费的
您可以将外部for循环与if(i==(number-1){
一起去掉,而在最后一次迭代中为(int j=(number-1);j编写。也许您只想一直到array.length-1
此外,为了避免出现arrayindexoutofbounds异常
您应该在迭代之前确保number
在[1,array.length]
范围内
以下是您可能看到的情况:
@Test
public void overwritearrayay() {
String[] array = {"foo", "bar", "foobar"};
log(Arrays.toString(array));
overwritearrayay(array, 1);
log(Arrays.toString(array));
}
public void overwritearrayay(String[] array, int n) {
if(n > 0 && array != null && n <= array.length) {
for(int i = n-1; i < array.length-1; i++) {
array[i] = array[i+1];
}
array[array.length-1] = null;
}
}
public static void log(String string) {
System.out.println(string);
}
如果我理解得很好:您希望删除由输入参数number
描述的元素,并将其余元素向左移动。此外,末尾的元素在所有移动中都保持不变。number是要删除的元素的编号,因此1表示要删除第一个元素,表示数组中0**的**索引,对吗
那么,您的代码似乎可以正常工作,但不需要外部循环。至少:
public void overwriteArray(int number) {
for(int j = number-1 ; j<array.length ; j++) {
array[j] = array[j+1];
}
}
它在相同的src和dest上工作:
如果src和dest参数引用相同的数组对象,则执行复制时,就好像位置srcPos到srcPos+length-1处的组件首先复制到具有长度组件的临时数组,然后临时数组的内容通过目标arr的destPos+length-1复制到位置destPos一样嗯
看起来你想要的是一个列表
而不是一个数组。是的,arshaji是对的,列表可以提供这种功能(还有更多)马上…但我必须使用一个数组,它的指定方式是D:@Pony。number
是正常的人类计数,即1,2,3,
,还是索引,即0,1,2,
正常人类计数,目前还不清楚counting@ppeterka66你是说;-)我不知道API是怎么背的:/在我的IDE中,我从Arrays.asS
开始,点击Ctrl+space
自动完成(类比Arrays.asList(…)
),它什么都没有给我。。。
public void overwriteArray(int number) {
for(int j = number-1 ; j<array.length ; j++) {
array[j] = array[j+1];
}
}
public void overwriteArray(int number) {
System.arraycopy(array, number, array, number-1, array.length-number);
}