-1

配列の各要素を他の要素と比較したい。2 つの要素が等しい場合は、一方を 1 に、もう一方を 0 に変更する必要があります。

私は何を間違えましたか?

package org.kodejava.example.io;

import java.util.Arrays;

public class Root {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(arr()));
    }

    public static int[] arr() {
        int[] arc ={1,2,5,76,8,0,6,5,1,4,8,4,6,};

        for (int i=0;i<13;i++){
            for (int j=1;j<13;j++){

                if (arc[i] == arc[j] ) {

                    arc[i]=1;
                    arc[j]=0;

                }
                else { 
                    arc[i]=1;
                }
            }
        }

        return arc;
    }

}

この例では、次のような行を取得したいと思います。[1, 1, 1, 1, 1, 1, 1, 0, 0, 1...]

しかし、私の試みは[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

前もって感謝します!

別の例として、シーケンスがある場合[1,1,4,6]、最終結果は になります[1,0,1,1]。したがって、要素が複数回一致する場合、1 つだけが 1 に等しく、他の要素は 0 に等しくなければなりません。

4

2 に答える 2

5

多分ここにあなたが望む機能があります:

public static int[] arr() {
    int[] arc ={1,2,5,76,8,0,6,5,1,4,8,4,6};

    for (int i=0;i<arc.length;i++){
        for (int j=i+1;j<arc.length;j++){

            if (arc[i] == arc[j] && arc[i] != 0) {
                arc[i]=1;
                arc[j]=0;
            }
        }

        if(arc[i] != 0) {
            arc[i] = 1;
        }
    }

    return arc;
}

注意arc.lengthしてarc[i] != 0確認し、 から始まる内側のループi+1.

アップデート

最初の 0 が最後に 1 になるという条件を満たせるように、関数を書き直しました。配列をパラメーターとして取得するようになりました。対応するインデックスの要素が既に 0 の場合、内部ループは実行されないため、いくつかの最適化があります。

import java.util.Arrays;

public class Root {

    public static void main(String[] args) {
        int[] arc = {1,2,5,76,8,0,6,5,1,4,8,4,6};
        System.out.println(Arrays.toString(arr(arc)));
    }

    public static int[] arr(int[] arc) {
        int indexOfTheFirstZero = -1;

        // find the first 0 and store its index
        for (int i=0;i<arc.length;i++){
            if(arc[i] == 0) {
                indexOfTheFirstZero = i;
                break;
            }
        }

        // main loop
        for (int i=0;i<arc.length;i++){

            // need work only if item is not 0
            if(arc[i] != 0) {

                for (int j=i+1;j<arc.length;j++){
                    if (arc[i] == arc[j]) {
                        arc[j] = 0;
                    }
                }

                arc[i]=1;
            }
        }

        // change first 0 (if it exists) to 1
        if(indexOfTheFirstZero != -1) {
            arc[indexOfTheFirstZero] = 1;
        }

        return arc;
    }

}
于 2013-02-15T15:09:35.460 に答える
2
public static int[] arr() {
    int[] arc = {1, 1, 4, 6};
    int[] result = new int[arc.length];
    for (int i = 0; i < arc.length; i++) { // Changed 13 to arc.length
        result[i] = 1; // Suppose not duplicate until proven wrong
        for (int j = 0; j < i; j++) { // first element is 0, only need to check up to current elememt
            if (arc[i] == arc[j]) {
                result[i] = 0; // Found a duplicate. Element i should be zero   
//             arc[j]=0; No need to change arc[j]. 
                break; // No need to check the rest of the array
//         } else {  // The else is now unnecessary

            }
        }
    }
    return result;
}
于 2013-02-15T15:10:33.367 に答える