如何计算二维数组中特定值的数目



假设我有2D阵列

X X X O O O 
O O O O O O 
O O O O O O 
X X X X O O 
O O O O O O 
O O O O O O

我想计算在2D数组中重复出现的X的数量。在这种情况下,它应该是7。我想返回一个true/false布尔值。我该怎么做?

您可能会为此使用Lambda表达式。但是,对于您来说,在2D阵列上迭代并在地图中收集计数可能更容易理解。

public class CountDemo {
public static void main(String[] args) {
char[][] matrix = { 
{ 'X', 'X', 'X', 'O', 'O', 'O' }, 
{ 'O', 'O', 'O', 'O', 'O', 'O' },
{ 'O', 'O', 'O', 'O', 'O', 'O' },
{ 'X', 'X', 'X', 'X', 'O', 'O' }, 
{ 'O', 'O', 'O', 'O', 'O', 'O' }, 
{ 'O', 'O', 'O', 'O', 'O', 'O' }};
Map<Character, Integer> charCount = new HashMap<>();
for (char[] characters : matrix) {
for (char character : characters) {
Integer count = charCount.get(character);
if (count == null) {
charCount.put(character, 1);
} else {
charCount.put(character, ++count);
}
}
}
System.out.println("Character count");
System.out.println("X's: " + charCount.get('X'));
System.out.println("O's: " + charCount.get('O'));
}
}

该程序的输出为

Character count
X's: 7
O's: 29

代码解释:

外部for循环在每个字符数组上迭代,而内部循环在当前数组中的字符上迭代。

一旦你有了一个角色,你就会"得到";给定键(字符(的当前(计数(值。如果没有找到匹配的字符,get()函数将返回null。在这种情况下,您找到了该角色的第一个实例;所以你只需输入";1〃;并将其保存在地图中。否则,您将递增当前计数,并将更新后的计数放回地图中。

一旦您完成了对矩阵的迭代,就可以显示统计数据了。由于我知道这个例子只是"X"one_answers"O",所以我直接调用了get()。当您不知道映射的内容时,正确的解决方案是迭代映射的条目并获取其中的任何内容。因此,上面代码中的System.out语句应该替换为以下代码片段:

Iterator<Map.Entry<Character, Integer>> iter = charCount.entrySet().iterator();

System.out.println("Character count");
while(iter.hasNext()) {
Entry<Character, Integer> entry = iter.next();
System.out.println(entry.getKey() + "'s: " + entry.getValue());
}       

如果你要改变你的字符矩阵如下

char[][] matrix = { 
{ 'X', 'X', 'X', 'O', 'E', 'O' }, 
{ 'O', 'O', 'O', 'O', 'O', 'O' },
{ 'E', 'O', 'O', 'O', 'O', 'O' },
{ 'X', 'X', 'X', 'X', 'E', 'O' }, 
{ 'O', 'O', 'O', 'O', 'O', 'O' }, 
{ 'O', 'O', 'O', 'O', 'E', 'O' }};

使用EntrySet解决方案的程序输出如下

Character count
E's: 4
X's: 7
O's: 25

最基本的解决方案是,要有一个Methode,它需要一个2D数组和您期望的值。然后使用两个for循环遍历数组。每次找到一个x,就在int变量上加一。在2D数组中迭代后,将该计数器与预期值进行比较,如果数字相同,则返回true;如果不是这样,则返回false。类似这样的东西:

public boolean countX (char[][] array, int expectation){
int counter = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if(array[i][j] == 'x'){
counter++;
}
}
}
return counter == expectation;
}

最新更新