0

2次元配列を見て、数値が複数回入力された回数を確認し、カウントを出力するJavaメソッドを作成しようとしています。

したがって、この配列を考えると

1   2   3   3   
5   6   7   8   
8   45  9   45  
10  17  18  13

メソッドは のカウントを返します3

これまでのところ、これは私が持っているものです

int dupe=0;
    int chk1=0, chk2=0;

    for (int row =0; row < dataTable.length; row ++)
    {//for 1

        for ( int col = 0; col < dataTable[row].length; col++)
        {//for 2





            if (dataTable[row][col] ==  dataTable [chk1][chk2])
            {//if

             dupe++;
            }//end if 

        chk1++;
        chk2++;



    }//end for 2 

}//end for 1
    dupe=dupe-1;
return dupe;

ただし、チェックが実行されるたびに再宣言される2番目の4内でchk1とchk2を宣言しない限り、実行されません。

4

4 に答える 4

4

実装方法:

  1. 見た数字を保存するマップを作成します。
  2. 2 次元配列の各行をループします。
  3. 2次元配列の各列をループします
  4. number が以前に見られなかった (マップにない) 場合は、値 1 でマップに挿入します
  5. number が (マップ内で) 以前に見られた場合、マップ エントリで値を増やします
  6. マップ内の値をループし、カウント数 > 1; この値があなたの答えです
于 2012-04-18T00:52:16.747 に答える
1

戦略: 配列全体を反復処理し、各要素を他のすべての要素と比較します。結果を変数に収集します。これは宿題だと思うので、コードを提供することはできませんが、開始するには戦略だけで十分です。

于 2012-04-18T00:52:23.540 に答える
0

すべての行を調べることで、配列をループできます...

for(int i = 0; i < rows; i++) {
    for(int j = 0; j < columns; j++) {
        // check
    }
}

そして、他のすべての数字と比較して、数字が繰り返されているかどうかを確認します。これは別の場所に保存できます。

于 2012-04-18T00:56:09.263 に答える
0

2 つの解釈:

/**
 * The number of entries that are double of others.
 * When 4 threes occure, 3 threes are counted.
 */
public static int moreThanOnce(int[][] matrix) {
    Set<Integer> uniqueNumbers = new HashSet<Integer>();
    int n = 0;
    for (int row = 0; row < matrix.length; ++i) {
        n += matrix[i].length;
        Collections.addAll(uniqueNumbers, matrix[i]);
    }
    return n - uniqueNumbers.size();
}

/**
 * The number of different numbers appearing more than once.
 * When four appears 3 times and eight 4 times, then the result is 2.
 */
public static int moreThanOnce2(int[][] matrix) {
    Set<Integer> usedNumbers = new HashSet<Integer>();
    Set<Integer> doubleNumbers = new HashSet<Integer>();
    for (int[] row : matrix) {
        for (int x : row) {
            if (!usedNumbers.add(x)) { // Not added, already used
                doubleNumbers.add(x);
            }
        }
    }
    return doubleNumbers.size();
}
于 2012-04-18T01:17:04.113 に答える