0

我在Java中有以下二维数组:

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...

(最后一行有两个 O,但在这种情况下,它只需要数一个)

这是我已经采取的步骤:

第 1 步:遍历数组并计算每个字符在整个数组中出现的次数。

第 2 步:遍历数组并查看字符是否已经出现在整个数组中。(布尔值)

这两个步骤对我有所帮助,但我不知道如何比较每个字符的每一行。我想我需要一起检查每个“字符+行组合”并将其与其他所有组合进行比较,但我不知道该怎么做。

4

2 回答 2

0

所以,首先你可以遍历整个数组,找到每个不同的字母。

在二维数组中,您可以存储字母和它们出现的行数。

然后你只需要遍历这些行并检查你之前存储的字母。最简单(但不是最优雅)的解决方案如下:您遍历每一行的次数与整个二维数组中出现的不同字母的数量一样多。如果你找到一个字母,你在你的另一个二维数组中增加它的计数器,然后转到下一个字母。如果您为每个字母检查了一行,则转到下一行。

于 2013-06-04T10:14:23.370 回答
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 回答