我很难确定如何确定最多输入的productType。例如,一个人可以输入" water"," water"," coffee"和" milk"。我的预期产量将是"水是最有序的产品。"这是我的主线逻辑。有人可以帮忙吗?
public static void main(String[] args) {
final int MAX_GUESTS = 16;
final int MAX_DRINKS = 48;
double[] drinkCosts = new double[MAX_DRINKS];
int count = 0;
String productType = getProductType();
while (!productType.equals("-1")) {
if (count < MAX_GUESTS) {
count++;
String productVariation = getProductVariation(productType);
for (int i = 0; i < count; i++) {
drinkCosts[count] = getDrinkCost(productVariation);
}
}
else {
JOptionPane.showMessageDialog(null, "Come back tomorrow.");
}
productType = getProductType();
}
double total = getTotal(drinkCosts);
print(total);
}
答案 0 :(得分:0)
我建议使用java.util.HashMap<>
。使用String
作为密钥类型(productType
)并使用Integer
作为值类型(productType
的出现次数)。
每次阅读productType
时(在while
循环开始时),请检查productType
是否已成为地图中的关键字。如果是这样,请将其映射的计数增加一。如果没有,请使用HashMap.put(String key, Integer value)
方法将productType
添加到地图中,计数为1.
在while
循环后,只需循环浏览地图即可检查输入的productType
最多(计数最多):
int highestCount = -1;
String mostEnteredProductType = null;
for (Entry<String,Integer> entry : map.entrySet()) {
if (entry.getValue() > highestCount) {
highestCount = entry.getValue();
mostEnteredProductType = entry.getKey();
}
}
System.out.println(mostEnteredProductType + " was the most ordered product.");
编辑:
要仅使用数组执行此操作,您需要有两个数组,一个用于productType
,另一个用于productType
的出现次数。由于数组具有固定长度,因此您需要将它们初始化为可能productType
的数量(我认为MAX_DRINKS
是什么?)。
因此,我们创建了两个数组:
String[] productTypes = new String[MAX_DRINKS];
int[] counts = new int[MAX_DRINKS];
这些数组本质上将作为一个映射,productType
数组中的每个String
映射到counts
中相同索引处的计数(例如,productTypes[5]
是已输入counts[5]
次。
然后,当您在productType
循环中阅读while
时,循环浏览productTypes
。如果找到该类型,请增加counts
的相应索引(例如,如果productType
位于productTypes[5]
,则递增counts[5]
。如果不是(如果您到达的元素是在找到输入的类型之前在productTypes
中为null),将该元素设置为给定的productType
,并将相应的counts
索引设置为1。
然后,只需更改我给出的上述代码片段:
int highestCount = 0;
String mostEnteredProductType = null;
for (int i = 0; i < NUM_DRINKS; i++) {
// Once we reach a null productType, we have reached the end of the
// entered productTypes
if (productTypes[i] == null) {
break;
} else if (counts[i] > highestCount) {
highestCount = counts[i];
mostEnteredProductType = productTypes[i];
}
}
// Should probably check that mostEnteredProductType isn't null here.
System.out.println(mostEnteredProductType + " was the most ordered product.");