-1

我想将数组的每个元素与其他元素进行比较。如果两个元素相等,则应将一个更改为 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,其他必须等于 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.lengtharc[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 回答