这是我的代码,但是当我尝试运行它时,它会给出一个超出范围的异常。
给定一个int数组,如果数组包含重复值,则返回一个删除了重复整数的int数组。
removeDuplicateInts({3}) -> {3}
removeDuplicateInts({1, 2}) -> {1, 2}
removeDuplicateInts({7, 7}) -> {7}
removeDuplicateInts({1, 7, 1, 7, 1}) -> {1, 7}
removeDuplicateInts({1, 2, 3, 4, 5}) -> {1, 2, 3, 4, 5})
removeDuplicateInts({1, 2, 3, 2, 4, 2, 5, 2}) -> {1, 2, 3, 4, 5}
public static int[] removeDuplicateInts(int[] numbers) {
ArrayList<Integer> num = new ArrayList<Integer>();
int[] newNumbers = {};
for (int i = 0; i < numbers.length; i++) {
num.add(numbers[i]);
for(int j = i + 1 ; j < numbers.length; j++) {
if (numbers[i] == numbers[j]) {
num.remove(numbers[i]);
}
}
}
for(int k = 0; k < num.size(); k++){
newNumbers[k] = num.get(k);
}
return newNumbers;
}
我不应该使用java.util.Arrays,因此这更具挑战性。
答案 0 :(得分:3)
您编写的newNumbers[k] = num.get(k);
无法正常工作,因为您从未为newNumbers分配了适当大小的新整数数组;你分配了一个大小为零的数组。
另一个问题是这一行:num.remove(numbers[i]);
因为您应该传递要删除的索引,而不是值本身。 (编辑:实际上,它也被允许删除(Object o),只要注意你是在那里传递int还是Integer。)
最后,删除循环中存在逻辑错误。如果数字在输入流中出现两次以上,那么您将尝试将其删除太多次;为防止这种情况,您可以使用continue
指令退出最内层循环。
答案 1 :(得分:3)
要遵循的步骤:
要求:
Java感兴趣的集合:
解决方案
实施
留给学生
答案 2 :(得分:0)
除了已经指出的内容之外,我还想将给定的代码添加为可能的答案。
public static int[] removeDuplicateInts(int[] numbers) {
ArrayList<Integer> num = new ArrayList<Integer>();
int current = numbers[0];
boolean isDuplicate = false;
for (int i = 0; i < numbers.length; i++) {
if (current == numbers[i] && !isDuplicate) {
isDuplicate = true;
} else if (current != numbers[i]) {
num.add(current);
current = numbers[i];
isDuplicate = false;
}
}
int[] newNumber = new int[num.size()];
for(int k = 0; k < num.size(); k ++) {
newNumber[k] = num.get(k);
}
return newNumber;
}
这与你正在做的最大的不同是isDuplicate。这个布尔值将阻止你重新添加一个int。 最后,您将拥有一个适当大小的ArrayList,没有重复项,您可以使用.size()方法作为返回数组的数组长度。