从固定大小的数组中删除`int`

时间:2015-06-20 19:28:18

标签: java

我编写了一个用于从数组中删除number的代码。当我运行我的代码时,它不会删除number,而是给我另一个number。例如,当我传递数字44以便删除它时,输出恰好是3而不是删除它。可能是什么问题?

给定输入:

2 5 33 44 3 8 6 7 4 

示例输出:

2 5 33 3 3 8 6 7 4 

代码:

public class RemoveAtIndex {

    public static void main(String[] args)
    {
        int[] myArray = {2, 5, 33, 44, 3, 8, 6, 7, 4};
        int[] output = removeFromIndex(myArray, 44);
        for(int i = 0; i < output.length; i++)
        {
            System.out.print(output[i] + " ");
        }

    }

    public static int[] removeFromIndex(int[] myArray, int num)
    {
        int[] resultArray = new int[myArray.length - 1];
        for(int i = 0; i < myArray.length; i++){
            if(myArray[i] != num){
                resultArray[i] = myArray[i]; 
            }
            else
                resultArray[i] = myArray[i+1];
        }
        return resultArray;
    }
}

3 个答案:

答案 0 :(得分:1)

您的代码将抛出ArrayIndexOutOfBoundException,因为两个数组的长度不同,并且您在i

中分配时使用相同的变量for-loop进行迭代

所以我将代码修改为i一个数组,j修改为其他数组

public static int[] removeFromIndex(int[] myArray, int num) {
        int[] resultArray = new int[myArray.length - 1];
        for (int i = 0, j = 0; i < myArray.length; i++) {
            if (myArray[i] != num) {
                resultArray[j++] = myArray[i];
            }
        }
        return resultArray;
    }

答案 1 :(得分:0)

尝试:

 public static int[] removeFromIndex(int[] myArray, int num)
 {
    int[] resultArray = new int[myArray.length - 1];
    for(int i = 0; i < myArray.length; i++){
       if(myArray[i] != num){
          resultArray.push(myArray[i]); 
       }
       else{
          return myArray;
       }

       return resultArray;
    }
}

您可能必须包含stack.push类

答案 2 :(得分:0)

您正在处理不同大小的数组,因此当您将旧数组中的内容分配给新数组并删除感兴趣的数量时,您将需要两个单独的索引。

public static void main(String[] args) throws Exception {
    int[] myArray = {2, 5, 33, 44, 3, 8, 6, 7, 4};
        int[] output = removeFromIndex(myArray, 44);
        System.out.println(Arrays.toString(output));
}

public static int[] removeFromIndex(int[] myArray, int num) {
    // Index counter for the new array
    int index = 0;
    int[] resultArray = new int[myArray.length - 1];
    for (int i = 0; i < myArray.length; i++) {
        // Skip the element that matches the number wanting to be removed
        if (myArray[i] == num) {
            continue;
        }

        resultArray[index] = myArray[i];
        index++;
    }
    return resultArray;
}

结果:

[2, 5, 33, 3, 8, 6, 7, 4]

您是否可以使用Java 8?如果是这样,您可以使用一行执行删除过程并获得相同的结果。

public static void main(String[] args) throws Exception {
    int[] myArray = {2, 5, 33, 44, 3, 8, 6, 7, 4};
        int[] output = removeFromIndex(myArray, 44);
        System.out.println(Arrays.toString(output));
}

public static int[] removeFromIndex(int[] myArray, int num) {
    return Arrays.stream(myArray).filter(n -> n != num).toArray();
}