2017-11-13 28 views
0

私は初心者のコーダーで、配列を学習しています。私は最近2次元配列を学びました.2次元配列に複製があるかどうか調べようとしています。私は、同じ列または行に重複があるかどうかをチェックする方法を知っていますが、それを比較しようとしている番号と同じ列または行にない場合は、数値を比較する方法を理解できません。ここに私のコードは今のところです:2次元配列全体の重複をチェックする方法は?

public static boolean correctNumbers(int[][] values) { 
    for (int i = 0; i < values.length; i++) { 
     for (int j = 0; j < values[i].length; j++) { 
      int num = values[i][j]; 
      for (int k = j + 1; k < values.length; k++) { 
       if (num == values[i][k] || num > values.length * values.length || num < 1) { 
        return false; 
       } 
      } 
      for (int l = i + 1; l < values.length; l++) { 
       if (num == values[l][j] || num > values.length * values.length || num < 1) { 
        return false; 
       } 
      } 
     } 
    } 

    return true; 
} 

私はメソッドを作成する必要があり、私はそれを作成する際に他の方法を使用することはできません。 助けてくれてありがとう!

編集:配列に重複がある場合、配列の数値が1より小さい場合、または配列の要素の総数より多い場合はfalseを返します。言い換えれば、このメソッドは、配列内の1から(i * j)までのすべての値が配列に含まれているかどうかをチェックします。私はその部分を説明するのが悪いことを実感しました。再度、感謝します!

+0

@KaustubhKhare真、それはDUPだということを、しかし、がありますいいえいいえ答えそこにそこからリンクされているdupにも – alfasin

+0

はい、しかし、リンクされた質問で私は本当にトップの答えで起こっているか分からない。 – WizKid22

+0

あなたの編集によると、2次元配列には1 ... n^2の値がすべて重複していないように見えます(各数字は正確に1回表示されるはずです)。今は別の問題です。別の配列をアクセサリとして使用できますか? – alfasin

答えて

0

あなたはHashSetのに番号を保存し、あなたは彼らがそれは(重複を意味する)がすでにいた場合、それぞれ1がそうでなければ、それを追加チェック反復しているときでロジックを簡素化することができます。

public static boolean correctNumbers(int[][] values) { 
    Set<Integer> set = new HashSet<>(); 
    for (int i = 0; i < values.length; i++) { 
     for (int j = 0; j < values[i].length; j++) { 
      int num = values[i][j]; 
      if (set.contains(num)) { 
       return false; 
      } 
      set.add(num); 
     } 
    } 
    return true; 
} 

EDIT

我々はHashSetのは、上記のコードでやっている同じ機能の配列を使用することができます

public static boolean correctNumbers(int[][] values) { 
    int n = values.length; 
    int[] dict = new int[n * n + 1]; 
    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < values[i].length; j++) { 
      int num = values[i][j]; 
      if (num < 1 || num > n || dict[num] != 0) { 
       return false; 
      } 
      dict[num] = 1; 
     } 
    } 
    return true; 
} 
+0

答えに感謝しますが、ハッシュセットを使用せずにそれを行う方法は何ですか? – WizKid22

+0

@ WizKid22ハッシュセットを使用しない*理由は何ですか? – alfasin

+0

私は持っているクラスのためです。今週末にテストが行​​われ、教授はサンプルの質問をスタディガイドとして提供しています。私はそれらを通過してこの質問に立ち往生していました。このクラスでは、ハッシュセットの使用方法をまだ学習していないので、テストで許可されるかどうかはわかりません。 – WizKid22

関連する問題