Эта программа просто должна удалять дубликаты из массива. Однако вторым циклом for в методе исключений было исключение вне границ. Я искал и не мог видеть, как это могло быть, поэтому я решил, что увеличу размер массива на 1, чтобы заставить его работать, с единственным недостатком - добавлением 0 в конец.
К моему удивлению, когда я увеличил размер трекера [] с 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]
РЕДАКТИРОВАТЬ: размер массива = 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;
}