2

2 つの配列間で一意の要素を見つけるコア Java プログラムが必要です。例: 配列 1 - 9、5、3、23、2、5 配列 2 - 19、5、3、23、24、53

両方の配列からの一意の要素の出力は、次のように出力されます: 9、2、19、24、53

正確なループでプログラムを書くのを手伝ってください。

注: コレクションのいずれかを使用して同じプログラムを処理したくなく、ループのみを使用して実行したいと考えています。ありがとう

4

2 に答える 2

1

有効な整数がどの範囲に収まるかに基づいて、counter配列と変数のサイズを微調整する必要があります。ただし、これはAPI で何も使用せず、ループのみを使用します。offsetjava.util

public static int[] uniques(int[] array1, int[] array2) {
    // assuming your integers are 0-53, you'd have to modify this if it's different
    int[] counter = new int[54];

    // offset needs to be changed based on if negative numbers are allowed
    int offset = 0;

    for(int i = 0; i < array1.length; i++) {
        counter[array1[i] + offset]++;
    }
    for(int i = 0; i < array2.length; i++) {
        counter[array2[i] + offset]++;
    }

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

    int[] uniqueArray = new int[numUniques];
    int index = 0;
    for(int i = 0; i < counter.length; i++) {
        if(counter[i] == 1) uniqueArray[index++] = i;
    }

    return uniqueArray;
}
于 2012-11-09T00:35:01.490 に答える
1

少なくとも 2 つのループを使用する必要があります。

public void uniqueM(int arrayA[], int arrayB[]){
    boolean uniqueA = true, uniqueB = true;
    int high_size = arrayA.length, low_size = arrayB.length;

   if(arrayA.length < arrayB.length){
     low_size = arrayA.length;
     high_size = arrayB.length;
    }

    for(int i = 0; i < high_size; i++){
      for(int j = 0; j < low_size;j++)
      {
         if(i < arrayA.length && arrayA[i] == arrayB[j]) uniqueA = false;
         if(i < arrayB.length && arrayB[i] == arrayA[j]) uniqueB = false;
      }
       if(uniqueA && i < arrayA.length) System.out.println(arrayA[i]);
       if(uniqueB && i < arrayB.length) System.out.println(arrayB[i]);

       uniqueA = true;
       uniqueB = true;
    }
}
于 2012-11-09T00:18:33.983 に答える