问题:给定一个数组和一个值,删除该值的所有实例并返回新的长度。元素的顺序可以改变。除了新的长度之外你留下的东西并不重要。
我想通过使用JAVA ArrayList来解决这个问题。按代码列出如下:
import java.util.ArrayList;
import java.util.Arrays;
public class removeElement {
/**
* @param args
*/
public int removeElement(int[] A, int elem) {
int length = 0;
ArrayList<Integer> al = new ArrayList<Integer>();
Arrays.sort(A);
//add elements in A to al
for(int i:A){
al.add(i);
}
//Remember arraylist's remove() is to remove first occurance of elements.
if(al.contains(elem)&&al.size() == 1){
return 0;
}
while(al.contains(elem)){
al.remove(elem);
}
length = al.size();
return length;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
removeElement re = new removeElement();
int[] A = {3, 3};
int element = 3;
System.out.println(re.removeElement(A, element));
}
}
结果显示:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:571)
at java.util.ArrayList.remove(ArrayList.java:412)
at removeElement.removeElement(removeElement.java:24)
at removeElement.main(removeElement.java:35)
我可以使用JAVA ArrayList来解决这个问题吗?或者我应该以另一种方式解决它?等待你的回复。非常感谢!
答案 0 :(得分:5)
你可以更简单。
public int[] removeElement(int[] input, int deleteMe) {
List<Integer> result = new LinkedList();
for(int i=0;input.length;i++)
if(deleteMe!=input[i])
result.add(input[i]);
return result.toArray(input);
}
答案 1 :(得分:2)
由于ArrayList
中有两个重载的remove()
方法,其中一个接受int参数作为对象的索引,另一个接受Object
作为要删除的参数。
您已使用包装器对象删除该int元素。否则,将调用重载的remove(int index)
,并且您没有索引为3的任何元素,因此,您得到IndexOutOfBoundsException
while(al.contains(elem)){
al.remove(new Integer(elem));
}