2013-11-11 4 views
0

Это может быть просто, но я не могу понять это. Я пытаюсь распечатать частоту ввода пользователя. Например, сколько раз пользователь вводит номер 1? Вот некоторые из моего кода.Частота целых чисел от пользовательского ввода

import java.util.Scanner; 
public class Ex2partB { 

    public static void main (String ags []) { 
     Scanner input = new Scanner (System.in); 

     int number1; 
     int number2; 
     int number3; 
     int number4; 
     int number5; 
     int product; 

     System.out.print("Enter first integer: "); 
     number1 = input.nextInt(); 

     System.out.print("Enter second integer: "); 
     number2 = input.nextInt(); 

     System.out.print("Enter third integer: "); 
     number3 = input.nextInt(); 

     System.out.print("Enter fourth integer: "); 
     number4 = input.nextInt(); 

     System.out.print("Enter fifth integer: "); 
     number5 = input.nextInt(); 

     product = number1 + number2 + number3 + number4 + number5; 

     System.out.printf (" Product is %d\n ", product); 

    } 
} 
+0

Какую часть вы возникли проблемы с? –

+0

Просто используйте массив. Жаль, что профессора не учат учить ученика рано ... –

+0

Продукт, когда вы умножаете. Сумма - это когда вы добавляете. –

ответ

1

Ниже приводится очень надежный подход. Он использует HashMap для хранения ввода и его частоты и передает результат на TreeMap для сортировки ключей и распечатки результатов.

import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 
import java.util.TreeMap; 

public class App { 
    public App() { 
     Map<Integer, Integer> map = buildMap(); 
     printFrequency(map); 
    } 

    public Map<Integer, Integer> buildMap() { 
     Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
     Scanner input = new Scanner(System.in); 
     int n, key; 

     System.out.print("How many numbers will you enter?: "); 
     n = input.nextInt(); 

     for (int i = 0; i < n; i++) { 
      System.out.printf("Enter integer #%d: ", i + 1); 
      key = input.nextInt(); 
      map.put(key, map.containsKey(key) ? map.get(key) + 1 : 1); 
     } 

     input.close(); 

     return map; 
    } 

    public void printFrequency(Map<Integer, Integer> map) { 
     Map<Integer, Integer> treeMap = new TreeMap<Integer, Integer>(map); 

     System.out.println("\nValue\tFrequency"); 

     for (Integer key : treeMap.keySet()) { 
      System.out.printf("%5d\t%9d\n", key, treeMap.get(key)); 
     } 
    } 

    public static void main(String[] args) { 
     new App(); 
    } 
} 

Пример запуска:

How many numbers will you enter?: 10 
Enter integer #1: 1 
Enter integer #2: 2 
Enter integer #3: 3 
Enter integer #4: 2 
Enter integer #5: 3 
Enter integer #6: 4 
Enter integer #7: 1 
Enter integer #8: 2 
Enter integer #9: 2 
Enter integer #10: 5 

Value Frequency 
    1   2 
    2   4 
    3   2 
    4   1 
    5   1 
+0

Я протестировал его. Это на самом деле очень хорошо. Это определенно дает ответ в лучшем формате. Большое спасибо за это, должно быть очень полезно в будущих заданиях. –

0

Храните входной файл в хэш-карте. Если вход уже находится в карте хеша, то увеличивайте значение для этого ключа. Затем вы будете иметь частоту ввода в качестве значения на карте.

+0

Приветствую вас, я попробую посмотреть, работает ли он. –

+0

«Например, сколько раз пользователь вводит номер 1?» Является ли это примером, или вход будет определенно целочисленным? Если вход представляет собой целочисленный ввод, решение на основе массива, такое как один peeskillet, предлагает более эффективный. – user2977365

+0

Ya целочисленный ввод. Спасибо за помощь. –

0

Необходимо установить ограничение max на то, насколько большим может быть номер ввода. Скажем, «выберите номер 1 и 10». Таким образом, вы можете создать массив размером 10;

int[] array = new int[10]; 

Инициализировать значения с помощью 0;

for (int i = 0; i > 10; i++){ 
    array[i] = 0; 
} 

Теперь каждый раз, когда вы получаете номер ввода, просто увеличивайте индекс. Но помните, что индексы равны нулю основе, так что за 10, вы хотите использовать индекс 9

Например, предположим, что пользовательский ввод 10. Затем Youd increse 9-индекс, как этот

array[number1 - 1]++; // 

И сделайте это для остальных входов.

Для печати значений просто цикл через массив

for (int i = 0; i < array.length) { 
    System.out.println((i + 1) + " : " + array[i]); 
} 
+0

Отлично, я понял. Большое спасибо за помощь. –

+0

Я верю, что целые числа, включая массивы целых чисел, инициализируются нулем, поэтому цикл инициализации не требуется. –

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