###直面した問題
私は以下のように積集合のプログラムを作成しました。しかしながら配列の要素を変えると、時々正確に出力されない事があります。例えば、
int[]A= new int[]{2,1,4,9,5};
int[]B= new int[]{2,1,5,9,6};
の時、通常なら1 2 5 9
と表示されるべきですが、私の場合1 2 9
と表示されてしまうのです。要素数を変えても然りです。
以下のプログラムのどこに原因があるのか、悩んでも分からなかったので、お教え頂ければ幸いです。
###実際のプログラム
static int[] intersection(int[] A, int[] B) { HashSet<Integer> uniq =new HashSet<Integer>(); int d=0; int e=0; while( d<A.length && e<B.length){ int v=A[d]; int w=B[e]; if (v<w) {++d; } else if(v>w) {++e; } else { if (uniq.add(v)) { }++d;++e; } } System.out.printf("\n"); int[] C=new int[uniq.size()]; int x=0; for(Integer n:uniq){ C[x++]=n; } return C; } public static void main(String args[]) { int[]A= new int[]{2,1,4,9,5}; int[]B= new int[]{2,1,5,9,6}; int[] C = intersection(A, B); for(int i=0; i<C.length; i++){ System.out.printf("%d ", C[i]); }
###解決後のプログラム
public static int[] intersection(int[] A, int[] B) { HashSet<Integer> uniq = new HashSet<Integer>(); int d = 0; int e = 0; while (d < A.length && e < B.length) { int v = A[d]; int w = B[e]; if (v < w) { ++d; } else if (v > w) { ++e; } else { if (uniq.add(v)) { } ++d;++e; } } System.out.printf("\n"); int[] C=new int[uniq.size()]; int x=0; for(Integer n:uniq){ C[x++]=n; } return C; } public static void main(String args[]) { int[]A= new int[]{2,1,4,9,5}; Arrays.sort(A); int[]B= new int[]{2,1,5,3}; Arrays.sort(B); int[] C = intersection(A, B); for(int i=0; i<C.length; i++){ System.out.printf("%d ", C[i]); } System.out.println();
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 13:26