该程序只是应该从数组中消除重复项。但是,消除方法中的第二个 for 循环抛出了越界异常。我一直在看,但看不到这是怎么回事,所以我想我会将数组大小增加 1,这样我就可以让它工作,唯一的缺点是在末尾附加了一个额外的 0。
令我惊讶的是,当我将 tracker[] 的大小从 10 增加到 11 时,即使我没有输入大部分数字,程序也会打印出从 0 到 9 的每个数字。这些数字来自哪里,为什么我会遇到这个问题?
import java.util.*;
class nodupes
{
public static void main(String[] args)
{
int[] dataset = new int[10];
//getting the numbers
for (int i = 0; i <= 9 ; i++)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter a one digit number");
dataset[i] = input.nextInt();
}
int[] answer = (eliminateduplicates(dataset));
System.out.println(Arrays.toString(answer));
}
public static int[] eliminateduplicates(int[] numbers)
{
boolean[] tracker = new boolean[11];
int arraysize = 1;
for(int k = 0; k <= 9; k++)
{
if(tracker[numbers[k]] == false)
{
arraysize++;
tracker[numbers[k]] = true;
}
}
int[] singles = new int[arraysize];
for(int l = 0; l <= arraysize; l++)
{
if(tracker[l] == true)
{
singles[l] = l;
}
}
return singles;
}
}
这部分发生了异常
if(tracker[l] == true)
但仅当跟踪器大小为 10 时。在 11 时它只打印 [0,1,2,3,4,5,6,7,8,9]
编辑: arraysize = 1 是调试的保留,最初它是 0
编辑:修复它,但现在末尾有一个 0,即使数组应该被完全填满。
public static int[] eliminateduplicates(int[] numbers)
{
boolean[] tracker = new boolean[10];
int arraysize = 0;
for(int k = 0; k < numbers.length; k++)
{
if(tracker[numbers[k]] == false)
{
arraysize++;
tracker[numbers[k]] = true;
}
}
int[] singles = new int[arraysize];
int counter = 0;
for(int l = 0; l < arraysize; l++)
{
if(tracker[l] == true)
{
singles[counter] = l;
counter++;
}
}
return singles;
}