通过调用方法,在我的情况下countInNumbers,将结果作为数组返回。
System.out.println(countIntInNumbers(Array));
结果:
{1=17, 2=10, 3=16, 4=17, 5=13, 6=22, 7=10, 8=15, 9=16, 10=19, 11=11, 12=15, 13=16, 14=13, 15=19, 16=17, 17=13, 18=21, 19=19, 20=15,}
我尝试根据总价值将不同表格上的数字分开。 示例...我想显示其总数在3到4之间的数字,以分隔表而不是其他数字。
面对这个问题导致你可能会注意到的结果是Map,因为我是Java新手,我现在很困惑。
任何人都可以从某事开始建议吗?
更新::: countIntInNumbers方法如下
public static Map<Integer, Integer> countIntInNumbers(int[][] mat) {
Map<Integer, Integer> intOccurences = new HashMap<>();
for (int[] row : mat) {
for (int intInRow : row) {
Integer occurences = intOccurences.get(intInRow);
if (occurences == null) { // first occurrence
intOccurences.put(intInRow, 1);
} else { // increment
intOccurences.put(intInRow, occurences.intValue() + 1);
}
}
}
return intOccurences;
答案 0 :(得分:0)
如果你想比较地图的价值,只需按键获取即可。然后由于map的值是包装器Integer,你可以使用==,&gt; =,&lt; =进行比较,因为Integer equals()方法只是将它包装的int值与另一个Integer的int值进行比较。例如:
// Adding some test values to the map
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 5);
map.put(2, 6);
map.put(3, 5);
// Get values by key map.get(key)
// Compare values map.get(key) == map.get(key) or use >=, <=
System.out.println(map.get(1) <= map.get(2)); // true
System.out.println(map.get(1) == map.get(3)); // true
System.out.println(map.get(1) >= map.get(2)); // false
在countIntInNumbers中,您似乎只是使用其toString()方法返回并打印地图。如果我说得对,你想打印值在3到4之间的键。在这种情况下,值是Integer,所以除了整数本身之外,3和4之间不会有任何值。
好的,在看到您的编辑后,将原始矩阵转换为地图,然后搜索您需要的值,并将它们放入新地图中。像这样:
public static Map<Integer, Integer> countIntInNumbers(int[][] mat) {
Map<Integer, Integer> matConvertedToMap = new HashMap<>();
for(int i=0; i<mat.length; i++)
{
matConvertedToMap.put(mat[i][0], mat[i][1]);
}
Map<Integer, Integer> intOccurences = new HashMap<>();
for (Map.Entry<Integer, Integer> entry : matConvertedToMap.entrySet())
{
if(entry.getValue() == 3 || entry.getValue() == 4)
{
intOccurences.put(entry.getKey(), entry.getValue());
}
}
return intOccurences;
}
不确定比较到底是什么以及您希望返回什么,但这应该让您对如何迭代地图有一般感觉。
答案 1 :(得分:0)
我尝试根据总价值将不同表格上的数字分开。示例...我想将其总数在3到4之间的所有数字打印到单独的表中,而不是其他数字。
我们不确定您在这里问的是什么,但如果您想要显示总数在2个数字之间的数字,那么您可以执行以下操作:
private void printNumbers(Map<Integer, Integer> intOccurences, int minTotal, int maxTotal){
boolean first = false;
System.out.print("{");
for (Map.Entry<Integer, Integer> entry : intOccurences.entrySet()) {
int total = entry.getValue();
if (total >= minTotal && total <= maxTotal) {
if (first) {
first = false;
} else {
System.out.print(", ");
}
System.out.print(entry.getKey() + "=" + total);
}
}
System.out.print("}");
}
如果您正在将复制值转移到新地图,那么可能会出现以下情况:
private Map<Integer, Integer> extractNumbers(Map<Integer, Integer> intOccurences,
int minTotal, int maxTotal) {
Map<Integer, Integer> result = new HashMap<>();
for (Map.Entry<Integer, Integer> entry : intOccurences.entrySet()) {
int total = entry.getValue();
if (total >= minTotal && total <= maxTotal) {
result.put(entry.getKey(), total);
}
}
// not sure if you want to remove the ones from the original map
return result;
}