' P '

whatever I will forget

Java array内の重複値を除去してユニークなものだけ取り出す

だいぶ悩みました。。
しかし、これもロジックを覚えておけば多分応用できますね。

前提

  • arrayの値はランダムに入力される
  • arrayのlengthも入力される値に左右される

メモ

  1. まず値の並びがランダムなのでArrays.sort()を行う(これやらないとロジックが正しく動かない)
  2. arrayの実際の大きさより-1した値を上限としてループ
  3. ループ時の現在の値とindex+1した値を比較
  4. 値が違う場合は新しいarrayに値を追加
  5. ループはarrayサイズの上限-1なので、もし同じ値が続いた場合{1,1,1,1}とか{1,2,3,3}だったら何も新しいarrayに値が入らないか、最後の3がarrayに入らない。
    ので最後のindexの値を新しいarrayに追加

コード

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int peopleNum = scanner.nextInt();
        int[] array = new int[peopleNum];

        for (int i = 0; i < peopleNum; i++) {
            int rate = scanner.nextInt();
            array[i] = judgeColor(rate);
        }
        Arrays.sort(array); //ここ重要
        System.out.println(Arrays.toString(array));
        ArrayList<Integer> newArray = new ArrayList<Integer>();

        for (int j = 0; j < array.length-1; j++) { //下で+1するのでOutofIndexにならないように-1しておく
            if (array[j] != array[j+1]) {
                newArray.add(array[j]);
            }
        }
        newArray.add(array[array.length-1]); //もし同じ値が続いた場合、newArrayは空になるのでこの行も重要
        System.out.println(newArray.toString());
        //omitted

参考

www.javatpoint.com