Вы страдаете от некоторых проблем дизайна. В частности, вы сталкиваетесь с задачей получения ваших номеров с задачей подсчета частоты.
import java.util.Scanner;
public class Ex1partA {
public static void main(String[] args) {
Scanner kbin = new Scanner(System.in);
//Get all inputs
List<Integer> inputs = getInputs(10,19);
//Count the frequency
Map<Integer, Integer> freq = countFrequency(inputs);
for (int key : freq.keySet()) {
System.out.println(key + ": " + freq.get(key));
}
}
public static List<Integer> getInputs(int min, int max) {
List<Integer> list = new ArrayList<Integer>();
System.out.print("\n\tInput numbers from 10 to 19: \n");
int i=0;
while (i < 50) {
Integer newNumber = kbin.nextInt();
if (newNumber < max && newNumber > min) {
list.add(newNumber);
} else {
System.out.println("Bad number. Ignoring.");//Note this simply skips, does not ask for re-entry of bad numbers
}
i++;
}
return list;
}
// Finds the frequency of the input list and out puts it as
// a map of number => how many times that number appears
public static Map<Integer, Integer> countFrequency(List<Integer> input) {
Map<Integer,Integer> freq = new HashMap<Integer,Integer>();
for (Integer val : input) {
Integer currentCount = freq.get(val);
freq.put(val, currentCount + 1);
}
return freq;
}
}
Позволяет отметить несколько ключевых моментов:
- Каждая функция должна сделать ровно одно, если это вообще возможно. Итак, здесь у нас есть функция, которая получает все входы (в пределах определенного диапазона), а другая, которая учитывает частоту списка чисел.
- Использование полных объектов, а не примитивных массивов дает вам много гибкости и мощности без накладных расходов на то, что вы должны вручную массировать данные.
- В частности, здесь важна концепция
Map
. Вы «сопоставляете» ключ (который в этом случае является входным значением, предоставленным пользователем числом от 10 до 19) со значением (которое в этом случае является числом раз, когда этот номер отображается в списке номеров, которые вы иметь).
- & &, а не &, чтобы применить логическое И к двум другим булевым операторам.
- Обратите внимание, что Collections API предоставляет методы подсчета частоты, которые позволят вам избежать самоопределения.
Укажите нижнюю часть .. :-) –
В чем проблема? Это похоже на домашнюю работу. –
очень последняя строка "System.out.println (" "+ значение);" –