如何删除数组中不需要的元素?

时间:2013-07-31 22:53:48

标签: java arrays methods

在下面的方法中,我试图删除数组输入中小于0且大于9的值。我一直在做研究,我发现使用Arraylist.remove()可能是最好的方法但我还不熟悉。所以我做的是尝试将整个数组复制到一个“垃圾”数组中,只放置小于0且大于9的值。但我的输出仍然是123145123145-110

 public static void test (){
 int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10};

    int[] garbage = new int[input.length];
    for (int i=0; i<input.length; i++){
        if (input[i] < 0 && input[i] > 9){
            garbage[i] = input[i];
        }
        int x = input[i];
        System.out.print(x);
  }

// EDIT

  public static void votes(){
     int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10,20};
        int count = 0;
        int[] garbage = new int[input.length];
        for (int i=0; i<input.length; i++){
            if (input[i]<0){
                garbage[count] = input[i];
                i++;
                count++;
            }
        int x = input[i];
        System.out.print(x);

        }

  }

4 个答案:

答案 0 :(得分:0)

您使用的是错误的间隔。

if (input[i] < 0 && input[i] > 9)

应该是这个

if (input[i] < 0 || input[i] > 9)

你的垃圾应该是空的,但你的syso.println只是显示输入数组中的所有元素。另一个问题是,如果对两个数组使用相同的索引,则垃圾数组中的元素为0&lt; = input [i]&lt; = 9,并且它们之间会有很多零。总而言之,您的代码应该如下所示

int[] garbage = new int[input.length];
int j = 0;
for (int i=0; i < input.length; i++){
    if (input[i] >= 0 && input[i] <= 9){
        garbage[j] = input[i];
        j++;
        System.out.print(garbage[j]);
    }

}

这样你就会看到添加到垃圾中的元素。并且所有零都在数组的末尾。

答案 1 :(得分:0)

您的输出打印出数组中的值,无论其值如何,因为它超出了if语句,尝试在print语句之后移动if语句的结束},如此

for (int i=0; i<input.length; i++){
    if (input[i] < 0 && input[i] > 9){
        garbage[i] = input[i];
    //}  <--- move this to
        int x = input[i];
        System.out.print(x);
    } // <--- here
}

然而,garbage数组中的值现在是您不想要的值(小于0且大于10),如果打印出那些你会找到预期输出的值。

如果你想要一个包含你想要的值的数组,那么创建一个数组并添加那个

int[] keeping = new int[input.length];
int j = 0;
for (int i=0; i<input.length; i++){
    if (input[i] > 0 && input[i] <= 9){
        keeping[j] = input[i];
        j++;
        int x = input[i];
        System.out.print(x);
    }
}

答案 2 :(得分:0)

向后走,所以当你删除某些东西时,你不会访问索引

for(int i = sizeOfArray - 1,i&gt; = 0; i--){   如果array [i]&gt; 0删除对象; }

对不起sudo代码

答案 3 :(得分:0)

好的,因为在评论中你说你真正要做的是打印出&gt; 0和&lt; 9的元素,而不是实际更改数组,这变得非常简单。

public static void votes(){
    int[] input = {1,2,3,1,4,5,1,2,3,1,4,5,-1,10,20};
    for (int i=0; i<input.length; i++){
        if (input[i] >= 0 && input[i] <= 9){
            System.out.print(input[i]);
        }
    }
}

就是这样!