从数组中删除特定值(java)

时间:2013-12-09 14:18:03

标签: java arrays

我有整数a = 4和数组b 7,8,9,4,3,4,4,2,1

我必须编写一个从数组b中删除int ALL a的方法

期望的结果7,8,9,3,2,1

这是我到目前为止所拥有的,

    public static int[] removeTwo (int x, int[] array3)
{
    int counter = 0;
    boolean[] barray = new boolean [array3.length];
    for (int k=0; k<array3.length; k++)
    {
        barray[k] = (x == array3[k]);
        counter++;
    }

     int[] array4 = new int [array3.length - counter];
     int num = 0;
     for (int j=0; j<array3.length; j++)
{
     if(barray[j] == false)
    {
        array4[num] = array3[j];
        num++;
    }

}
     return array4;

我收到此错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Utility.removeTwo(Utility.java:50)
    at Utility.main(Utility.java:18)

Java结果:1

非常感谢任何帮助!

6 个答案:

答案 0 :(得分:2)

错误源于此for循环:

for (int k=0; k<array3.length; k++)
{
    barray[k] = (x == array3[k]);
    counter++;
}

当您创建int[] array4 = new int [array3.length - counter];时,您正在创建一个大小为0的数组。如果该项目是要删除的项目,则只应增加计数器:

for (int k=0; k<array3.length; k++)
{
    boolean b = (x == array3[k]);
    barray[k] = b;
    if(b) {
        counter++;
    }
}

要在评论中回答您的问题,应该调用该方法,并且可以像这样检查:

public static void main(String[] args) {
    int[] array3 = {0,1,3,2,3,0,3,1};
    int x = 3;
    int[] result = removeTwo(x, array3);
    for (int n : result) {
        System.out.print(""+ n + " ");
    }
}

答案 1 :(得分:1)

在这一行:

 int[] array4 = new int [array3.length - counter];

您创建一个大小为0的数组,此时counter等于array3.length

这意味着您无法访问该数组中的任何索引。

答案 2 :(得分:0)

您正在创建

int[] array4 = new int [array3.length - counter];// 0 length array.

你不能拥有0th索引。至少长度1应具有0th索引。

BTW我的建议,最好使用List。那么你可以轻松做到这一点。

答案 3 :(得分:0)

对于这项工作来说,真的是一个数组是错误的工具,因为除了其他任何东西之外,你最终会得到无法移除的杂散值。只需使用ArrayList,它就可以提供removeAll()方法来完成您的需要。如果你真的需要数组,你甚至可以这样做:

List<Integer> list = new ArrayList(Arrays.asList(array))
list.removeAll(4);
array = list.toArray();

(确切的方法名称/参数可能需要调整,因为这些都来自内存)。

答案 4 :(得分:0)

最简单的方法是使用第二个数组放置正确的值

喜欢的东西

public static int[] removeTwo (int x, int[] array3)
{
    int counter = 0;
    int[] array4 = new int[array3.lenght];
    for (int i = 0; i < array3.lenght; i ++) {
       if(array3[i] == x){
           array4[counter] = array3[i];
       }
    }
    return array4;
}

anoterh方法是从x移除array3 calue并将值向前移动

答案 5 :(得分:0)

从数组中删除元素的最佳方法是将ListIterator一起使用。尝试,

 Integer[] array = {7, 8, 9, 4, 3, 4, 4, 2, 1};
 List<Integer> list = new ArrayList(Arrays.asList(array));
 for(Iterator<Integer> it=list.iterator();it.hasNext();){
     if(it.next()==4){
        it.remove();
      }
  }