我想创建一个返回两个计数值的函数。通过迭代 for 循环来对值进行计数。
例如,我有一组人(男性、女性、成人、 child ),我只想查找男孩的数量( child +男性)和女性的数量(成人+女性)。
在过去的几年里,我一直在用 javascript 编写代码,这就是我用 javascript 编写的代码。
function countBoysAndWomen() {
var womenCounter = 0;
var boysCounter = 0;
for (var p of persons) {
if (p.isAdult() && p.isFemale()) womenCounter++;
else if (p.isChild() && p.isMale()) boysCounter++;
}
return {amountOfWomen: womenCounter, amountOfBoys: boysCounter};
}
现在我的问题是,如何在java中返回这样的对象?我需要创建一个新类吗?你会怎么称呼这个类?
仅仅为了这一点就搞一个完整的类,这不是效率极低吗?
如果我想计算一对不同的值怎么办?我是否必须创建另一个全新的类?
下面这实际上是创建此类函数的最佳方法吗?
private Counter countBoysAndWomen() {
Counter counter = new Counter();
for (Person p:persons) {
if (p.isBoy()) counter.addBoy();
else if (p.isWomen()) counter.addWoman();
}
return counter;
}
当然,另一种选择是将函数分成函数“countBoys()”和“countWomen()”,但这样我就必须迭代数组两次,这不是最佳选择,对吗?
最佳答案
您可以从主函数或任何方法中调用以下方法。它将返回所需值的 map 。在下面的代码中,我假设 people 是一个列表。但如果 person 是一个数组,则使用 length 方法更改 size() 。
public HashMap<String,Integer> countBoysAndWomen() {
int womenCounter = 0;
int boysCounter = 0;
HashMap<String,Integer> hm = new HashMap<>();
for (int i = 0 ; i < persons.size() ; i++ ) {
if (p.isAdult() && p.isFemale()){
womenCounter++;
}
else if (p.isChild() && p.isMale()) {
boysCounter++;
}
}
hm.put("women",womenCounter );
hm.put("boy" , boysCounter);
return hm;
}
用于检索 HashMap 值:-
for (Map.Entry<String,String> entry : hm.entrySet())
System.out.println("Key = " + entry.getKey() +
", Value = " + entry.getValue());
}
关于java - 从一个函数返回 2 个计数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123733/