我不确定我的程序中的问题是否只是在我声明数组的地方,或者我是否填充其中一个而不是他们可以采取的。
这是我的代码:
import java.util.Scanner;
import java.util.Arrays;
public class EliminateDuplicates {
public static void main(String[] args) {
int[] numberList = new int[10];
System.out.println("Please enter ten integers.");
Scanner input = new Scanner(System.in);
for (int i = 0; i < numberList.length; i++) {
numberList[i] = input.nextInt();
}
int[] newNumberList = new int[10];
newNumberList = eliminateDuplicates(numberList);
System.out.println("The discrete numbers are: ");
for (int i = 0; i < newNumberList.length; i++) {
System.out.println(newNumberList[i] + ' ');
}
}
public static int[] eliminateDuplicates(int[] numberList) {
int[] noDuplicateList = new int[numberList.length];
int size = 0;
java.util.Arrays.sort(numberList);
for (int i = 0; i < numberList.length; i++) {
if (numberList[i] != numberList[i+1]) {
noDuplicateList[i] = numberList[i];
size++;
}
}
return noDuplicateList;
}
}
这是我得到的输出+错误信息:
Please enter ten integers.
9
8
7
3
3
4
1
2
8
6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at EliminateDuplicates.eliminateDuplicates(EliminateDuplicates.java:51)
at EliminateDuplicates.main(EliminateDuplicates.java:28)
答案 0 :(得分:3)
你的问题在这里:
for (int i = 0; i < numberList.length - 1; i++) {
if (numberList[i] != numberList[i+1]) {
当i
到达numberList.length-1
时,i+1
超出数组范围。
您应该更改循环的范围。您在分配到size
列表时也会使用noDuplicateList
索引,否则您将在该列表中出现空白。
for (int i = 0; i < numberList.length - 1; i++) {
if (numberList[i] != numberList[i+1]) {
noDuplicateList[size] = numberList[i];
size++;
}
}
你仍然会遇到一个小问题。由于您的eliminateDuplicates
方法返回与输入大小相同的数组,如果存在重复项,则输出数组的末尾将包含未使用的索引(将包含零)。如果您希望避免这种情况,可以将输入数组的所有项添加到HashSet
,找到该组的size()
,并为输出创建该大小的数组。使用Set
也会简化您的代码,因为Set
会为您消除重复项,并且您不必对输入数组进行排序。
public static int[] eliminateDuplicates(int[] numberList) {
Set<Integer> noDups = new HashSet<Integer>();
for (int num : numberList)
noDups.add(num);
int[] noDuplicateList = new int[noDups.size()];
Iterator<Integer> iter = noDups.iterator();
for (int i=0; i<noDuplicateList.length && iter.hasNext();i++)
noDuplicateList[i]=iter.next();
return noDuplicateList;
}
答案 1 :(得分:0)
您的问题在这里,eliminateDuplicates
:
if (numberList[i] != numberList[i+1]) {// i+1, for the last elements raise the exception
答案 2 :(得分:0)
if (numberList[i] != numberList[i+1])
当i=9
时,这会查找超出范围的索引10
。
答案 3 :(得分:0)
问题在于这一行:
if (numberList[i] != numberList[i+1]) {
如果i等于numberList.length
,则第二个条件超出范围。
所以你必须改变:
for (int i = 0; i < numberList.length; i++) {
TO:
for (int i = 0; i < numberList.length-1; i++) {