0

私はJavaで次の2D配列を持っています:

String[][] rows = {
    {"M","O","N","K","E","Y"},
    {"D","O","N","K","E","Y"},
    {"M","A","K","E"},
    {"M","U","C","K","Y"},
    {"C","O","O","K","Y"},
    };

今、各文字が出現する配列の行数のリストを作成したいと思います。

したがって、これは結果である必要があります。

M occurs in 3 rows, O occurs in 3 rows, N occurs in 2 rows, A occurs in 1 row, etc...

(最後の行には 2 つの O がありますが、その場合は 1 つだけカウントする必要があります)

これは私がすでに行った手順です:

ステップ 1: 配列全体をループし、各文字が配列全体で何回出現したかを数えます。

ステップ 2: 配列全体をループし、その文字が配列全体に既に出現しているかどうかを調べました。(ブール値)

これらの 2 つの手順は少し役に立ちましたが、文字ごとにすべての行を別々に比較する方法がわかりません。すべての「文字と行の組み合わせ」を一緒にチェックして、他のすべての組み合わせと比較する必要があると思いますが、それを正確に行う方法がわかりません。

4

2 に答える 2

0

あなたも試すことができます:

  1. Map<Character, Integer>配列内の各文字の出現回数を表す を初期化します
  2. 行ごとに、すべての文字をSet<Character>
  3. このセットの各文字について、マップ内の出現回数を追加または増分します

初期化したマップには、必要なすべての情報が含まれています


ジャワ:

public static Map<Character, Integer> countCharInRow(char[][] myArray) {
    Map<Character, Integer> charOccurences = new HashMap<>();
    Set<Character> rowCharacters = new HashSet<>();
    for(char[] row : myArray) {
        for(char charInArray = row) { // put all the chars on the line in the set
            rowCharacters.add(row);
        }
        for(char charInSet : rowCharacters) {
            Integer occurences = charOccurences.get(charInSet);
            if(occurences == null) { // first occurence
                charOccurences.put(charInSet, 1);
            } else {  // increment
                charOccurences.put(charInSet, occurences.intValue() + 1);
            }
        }
    }
    return charOccurences;
}
于 2013-06-04T10:15:13.873 に答える
0

したがって、最初に配列全体をループして、すべての異なる文字を見つけることができます。

2 次元配列では、文字とそれらが表示される行の数を格納できます。

次に、行を調べて、以前に保存した文字を確認するだけです。最も簡単な (ただし、最もエレガントではない) 解決策は次のとおりです。2D 配列全体で発生した異なる文字の数だけ各行を調べます。文字が見つかったら、他の 2D 配列でそのカウンターをインクリメントし、次の文字に進みます。すべての文字の行をチェックした場合、次の行に移動します。

于 2013-06-04T10:14:23.370 に答える