Я бы рекомендовал использовать 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.");
Любая идея, как сделать это только с массивами – dan2693
@ dan2693 см. в редакции моего ответа выше. Надеюсь, это поможет, но дайте мне знать, если лет У вас есть еще вопросы. – mapeters
@ dan2693 Я знаю, что вы уже приняли мой ответ, но вот еще одно предложение: возможно, лучше создать класс ProductTypeCount с двумя полями: productType и count. Тогда вам нужен только один массив ProductTypeCounts, а не два отдельных массива для типов товаров и подсчетов. – mapeters