如何确定输入的输入值最多

时间:2015-12-06 00:52:01

标签: java

我很难确定如何确定最多输入的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);
   }

1 个答案:

答案 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.");