このプログラムは、単に配列から重複を排除することになっています。しかし、remove メソッドの 2 番目の 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;
}