9

私の目的は、配列 a と b の交点の値を見つけて新しい配列 c に格納し、出力が 3,10,4,8 になるようにすることです。特定の値を 3 番目の配列 c に割り当てるにはどうすればよいですか?

 public static void main(String[] args) {
        int a[] = {3, 10, 4, 2, 8};
        int[] b = {10, 4, 12, 3, 23, 1, 8};
        int[] c;
        int i=0;
         for(int f=0;f<a.length;f++){
              for(int k=0;k<b.length;k++){
                    if(a[f]==b[k]){
 //here should be a line that stores equal values of 2 arrays(a,b) into array c
            }
          }
        }
            for (int x=0; x<c.length; x++){
             System.out.println(c[i]);
            }
       }
  }
4

5 に答える 5

9

これは簡単な方法です。

int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
List<Integer> aList =  Arrays.asList(a);
List<Integer> bList =  Arrays.asList(b);
aList.retainAll(bList);
System.out.println(" a intersection b "+aList);
int[] c = aList.toArray(new int[0]);
于 2012-10-16T16:31:38.933 に答える
1
public static void main(String[] args) {
        int a[] = {3, 10, 4, 2, 8};
        int[] b = {10, 4, 12, 3, 23, 1, 8};
        int[] c = new int[(int)Math.min(a.length, b.length)];
        int i=0;
         for(int f=0;f<a.length;f++){
              for(int k=0;k<b.length;k++){
                    if(a[f]==b[k]){
                    c[i] = a[f];
                    i++;
            }
          }
        }
        for (int x=0; x<i; x++){
           System.out.println(c[x]);
        }
       }
  }

それが役に立てば幸い。または、時間の複雑さの問題がある場合は、Java Setを試してください。

于 2012-10-16T16:33:29.647 に答える
0

あなたは一時変数の助けを借りることができます(しかし、あなたがそうする必要がなければ、これは基本的に車輪の再発明です)-

int[] c = new int[0];
//...
    if(a[f] == b[k]) { 
        int[] temp = c;
        c = new int[c.length + 1];
        for(int i=0; i<temp.length; i++) {
            c[i] = temp[i];
        }
        c[c.length - 1] = a[f];
    }
//...
于 2012-10-16T16:46:39.203 に答える
0

まず、配列にスペースを割り当てる必要があります。

int[] c = new int[SOME_SIZE];

SOME_SIZE難しい部分は、どのくらいあるべきかを把握することです. 交点を計算しているので、可能な最大のサイズは と の最小サイズaですb

最後に、配列に要素を割り当てるには、次のようにします

c[idx] = a[f]

idx次に、どこに行くかを追跡する必要があります。から始めてidx = 0、追加する新しい要素が見つかるたびに増分することをお勧めしcます。

于 2012-10-16T16:29:12.843 に答える
0

許可されている場合は、c に ArrayList を使用し、その拡張可能な配列

ArrayList c = new ArrayList();
.
.
.
.
.
c.add(a[f]);

また、配列の並べ替えが許可されている場合は、小さい配列を並べ替えてから、大きい配列を反復処理し、小さい配列で二分探索を行うことをお勧めします。

于 2012-10-16T16:27:17.100 に答える