将数据存储在数组中并使用for循环向下推送项目

时间:2013-11-13 15:40:38

标签: java arrays for-loop store

我不确定如何使这个方法按下项目而不是覆盖它们。现在,如果我有一个包含10个项目的数组:

[0] = zero
[1] = one
[2] = two
...
[10] = ten 

我在索引[2]处插入一个项目,会发生以下情况:

[0] = zero
[1] = one
[2] = two
[3] = two
[4] = two
 ...  
[10] = two 

它会覆盖所选索引之后的所有项目,而不是按索引向下推送它们。为什么会发生这种情况,我该如何解决?感谢。

public void insert(int i, String s) {

if (array[i] == null) {
    array[i] = s;spot on the list.
} else { 
    for (int j = i; j < array.length - 1; j++) {
        array[j + 1] = array[j]; 

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

4 个答案:

答案 0 :(得分:2)

如果您想“推送”项目而不是“覆盖”它们,那么您不应该使用数组,使用ArrayList可以更轻松地完成这项工作:

List<Integer> lst = new ArrayList<Integer>();
lst.add(1);
lst.add(3);
lst.add(4);
lst.add(1, 2); // "push" the elements to the right, making room for 2

在上面的示例中,最后lst将包含1, 2, 3, 4

答案 1 :(得分:1)

问题在于你的替代:

 array[j + 1] = array[j]; 

举个例子:如果您使用的是j = 0,那么您可以使用array[1]中的值替换array[0] 然后在循环的下一步中,将array[2]的值替换为array[1]的值,该值已替换为array[0]的值。

您应该从头到尾处理您的数组(将jarray.length减少到j=i),您应该没问题。

答案 2 :(得分:1)

你正在推动改变的指数。

“array [j + 1] = array [j];” 更改数组[j](在for循环的开头是==到array [i])之后。

但是看看这个:

ar = [1,2,3]

在位置1插入意味着我将使ar [2] = ar [1]。

怎么做?拉而不是推。使循环从array.length-1下移到您想要更改的索引。

//check if you need to grow the array first.
for (int j = array.length-1; j > i; j--) {
    array[j] = array[j-1]; 
}
//and now insert.

答案 3 :(得分:0)

您可以更改for循环条件

for (int j = i; j < array.length - 1; j++) {

            array[j + 1] = array[j]; 

for(int j=array.length-2;j>=i;j--){

            array[j + 1] = array[j];

通过此更改,以下信息将显示在控制台中:

[zero, one, two, two, three, four, five, six, seven, eight, nine]