2015-12-06 2 views
0

Мне сложно определить, как определить, какой продукт был введен максимально. Например, человек может вводить «воду», «воду», «кофе» и «молоко». Мой ожидаемый результат был бы «Вода была самым упорядоченным продуктом». Это моя основная логика. Может ли кто-нибудь помочь?Как определить, какое входное значение было введено самым

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

Я бы рекомендовал использовать 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."); 

EDIT: чтобы сделать это только с массивами, вам нужно будет иметь два массива, один для 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, прежде чем найти введенный тип), установите этот элемент к данному 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."); 
+0

Любая идея, как сделать это только с массивами – dan2693

+0

@ dan2693 см. в редакции моего ответа выше. Надеюсь, это поможет, но дайте мне знать, если лет У вас есть еще вопросы. – mapeters

+0

@ dan2693 Я знаю, что вы уже приняли мой ответ, но вот еще одно предложение: возможно, лучше создать класс ProductTypeCount с двумя полями: productType и count. Тогда вам нужен только один массив ProductTypeCounts, а не два отдельных массива для типов товаров и подсчетов. – mapeters

Смежные вопросы