如何从java中的给定数组中删除所有出现的整数(例如17)? 我尝试将条目设置为(整数)null虽然它不起作用。
输入数组:[0,6,0,17,1,9,17,8,4]
输出数组:[0,6,0,1,9,8,4]
for(int i =0;i<ansa.length;i++){
if(ansa[i]==17)
{
ansa[i]=(Integer)null;
}
}
这导致
Exception in thread "main" java.lang.NullPointerException
答案 0 :(得分:1)
试试这个。
Integer[] array ={0,6,0,17,1,9,17,8,4};
List<Integer> list = new ArrayList<Integer>( Arrays.asList(array ));
list.removeAll(Arrays.asList(17 ));
array =list.toArray(new Integer[0]);
System.out.println(Arrays.toString(array));
答案 1 :(得分:1)
我尝试将条目设置为(整数)null虽然它不起作用。
当然没有,因为数组的大小没有改变。为此,一些已定义的java集合(特别是ArrayList
和Iterator
类)可以为您提供更好的方法。
在伪代码中:
Turn array into a List
Iterate over its elements
If the element is the given number
Remove it
Return the List as an Array
您可以填写空白,只需记住您实际上无法从数组中删除元素,因为它的大小是静态的。
注意:我正在采用教育方法。
答案 2 :(得分:1)
int[] array = { 0,6,0,17,1,9,17,8,4 };
int[] filtered = Arrays.stream(array).filter(i -> i != 17).toArray();
System.out.println(Arrays.toString(filtered));
: - )
答案 3 :(得分:0)
这似乎有效 - 尽管我怀疑人们会发布更好/更有效的解决方案。
public void test() {
int[] before = new int[] {0,6,0,17,1,9,17,8,4};
int[] after = remove(before, 17);
System.out.println("Before: "+Arrays.toString(before));
System.out.println("Aftre: "+Arrays.toString(after));
}
private int[] remove(int[] before, int remove) {
// Work out how long it must be.
int keep = 0;
for ( int i = 0; i < before.length; i++ ) {
if(before[i] != remove) {
keep += 1;
}
}
// Make the new one
int[] after = new int[keep];
// Fill it in.
for ( int i = 0, j = 0; i < before.length; i++ ) {
if(before[i] != remove) {
after[j++] = before[i];
}
}
return after;
}
答案 4 :(得分:0)
这是一个可能的解决方案:
int[] array1 = new int[]{0,6,0,17,1,9,17,8,4};
ArrayList<Integer> result = new ArrayList<Integer>();
boolean flag = true;
for(int i = 0; i < array1.length; i++) {
for(int j = 0; j < array1.length; j++) {
if(array1[i]==array1[j]&&i!=j) {
flag = false;
}
}
if(flag) {
result.add(array1[i]);
}
else{
flag = true;
}
}
System.out.println(result);
答案 5 :(得分:0)
我认为,如果您不想使用ArrayList,则必须计算数组中有多少17个并使用ansa.length-count字段创建一个新的
答案 6 :(得分:0)
您无法从当前使用for循环的数组中删除项目。目前,即使您删除了数组,也要到达数组的末尾并查找下一个值。数组长度指示器(ansa.length)不会像您想的那样自动更新。
您应该使用List和迭代器来遍历列表。 您可以使用.remove函数
答案 7 :(得分:0)
你差不多完成了!!
Integer[] ansa = new Integer[] { 0, 6, 0, 17, 1, 9, 17, 8, 4 };
for (int i = 0; i < ansa.length; i++) {
if (ansa[i] == 17) {
ansa[i] = (Integer) null;
}
}
for (Integer integer : ansa) {
System.out.print(integer+","); //0,6,0,null,1,9,null,8,4,
}
你正面临着问题,因为你宣称原始我想,
int[] ansa = new int[] // Primitive