2012-10-16 20 views
9

私の目的は、配列aとbの交点の値を見つけてそれらを新しい配列cに格納して、出力が3,10,4,8になるようにすることです。 3番目の配列に与えられた値をどのように代入するのですか?2つの配列の交点を見つける

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]); 
      } 
     } 
    } 
+1

これは厳密に配列ickiesを必要と宿題ではない場合、参照'Set'インターフェース - メンテナンスが必要な場合は少し面倒ですが、あまり面倒ではありません。 –

+0

あなたはそこにコードがあり、使用されていない0から始まるi(ndex)があります。 – CBredlow

+0

このリンクをチェックしてくださいhttp://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html –

答えて

0

の配列をソートするために許可されている場合、私は小さな配列をソートし、次に小さい配列に、より大きなアレイとバイナリサーチを反復することをお勧めいたしますまた、Cの利用のArrayList、その可変長配列

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

を許可されている場合。

+0

これは許可されている場合、これが良い解決策であることを明確にすべきだと思います。私たちが知っている限り、OPのプロジェクトにはArrayListを使用できないような制限があるかもしれません。 –

+0

ありがとうございます。私はこれが私が必要とすることをするだろうと確信していますが、私はまだArrayListsに精通していません。 –

0

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

int[] c = new int[SOME_SIZE]; 

難しい部分はSOME_SIZEはどうあるべきかくらい把握されます。交差点を計算しているので、最も可能なのはabの最小サイズです。

最後に、配列の要素を割り当てるには、あなただけの

c[idx] = a[f] 

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

+0

それは初心者のために混乱しています。しかし、ありがとう:) –

+0

@AlexandrMelnikあなたが混乱している場合、私はあなたが別の配列をコピーするプログラムを書くことをお勧めします。この単純なプログラムで配列の使用に問題が残っている場合は、それらについてさらに読んで、明確にするためにいくつかの特定の質問に戻ってください。 –

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]); 
+0

ありがとうございます。私はこれが私が必要とすることをするだろうと確信していますが、私はまだArrayListsに精通していません。 –

+0

これはコンパイルされません。 1つは、 'Arrays.asList'が' List

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を試してください。

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]; 
    } 
//... 
+0

両方の方法が正しい限り、私はそれらのいずれかを好むことができます:) ありがとう –

+0

あなたはようこそ。 :) –

関連する問題