Java массив организован непреднамеренно - PullRequest
0 голосов
/ 27 мая 2018

Я работаю над академическим заданием, и у меня все работает, но мне интересно, почему мои выходные данные приводят числа в порядок от наименьшего к наибольшему.

Может кто-нибудь сказать мне, где в моем коде это происходит?

Вот мой код:

public static void main(String[] args) {
    System.out.println("Quenten's Copy");
    Scanner input = new Scanner(System.in);

    int number[] = new int [1000000]; // initialize first array
    int count[] = new int [1000000]; // initialize second array
    int temp = 0; // intialize integer to hold for comparison
    int i; // intialize loop integer

    System.out.print("Enter seven numbers: "); // ask user for input

    // first loop - takes in user input
    for (i = 0; i < 7; i++) {
        number[i] = input.nextInt();
        }

     // second loop - checks for reoccurance of numbers
    for (i = 0; i < number.length; i++) {
        temp = number [i];
        count [temp]++;
    }

    // final loop - gives the output of the count
    for (i = 1; i < count.length; i++) {
        if (count [i] > 0) {

            // output statement - tells user each number and how many
            // times each number occurs
            System.out.printf("Number %d occurs %d times\n", i, count [i]);



        }
    }

Вот копия вывода:

Enter seven numbers: 12 23 44 22 23 22 55
Number 12 occurs 1 times
Number 22 occurs 2 times
Number 23 occurs 2 times
Number 44 occurs 1 times
Number 55 occurs 1 times

Как вы можете видеть, он указан 22 до 23 и т. Д. Iхотите напечатать в порядке ввода.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Прежде всего 2 цикла будут примерно бесконечными (1000000 раз).Дорогая операция.

 // second loop - checks for reoccurance of numbers
for (i = 0; i < number.length; i++) {
   System.out.println("app. infinity loop");
}

// final loop - gives the output of the count (also app. infinity)
  for (i = 1; i < count.length; i++) {
      System.out.println("app infinity loop");
 }

Я думаю, что это будет лучший ответ (как, например, @Manh Quyet)

public static void main(String[] args) {

    System.out.println("Quenten's Copy");
    Scanner input = new Scanner(System.in);

    int number[] = new int[7]; // initialize first array
    HashMap<Integer, Integer> map = new LinkedHashMap<>();
    System.out.print("Enter seven numbers: "); // ask user for input

    // first loop - takes in user input
    for (int i = 0; i < 7; i++) {
        number[i] = input.nextInt();
    }

    // second loop - checks for reoccurance of numbers
    for (int i = 0; i < number.length; i++) {
        int key = number[i];
        if (map.containsKey(key)) {
            map.put(key, map.get(key) + 1);
        } else {
            map.put(key, 1);
        }
    }

    // final loop - gives the output of the count
    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        Integer key = entry.getKey();
        Integer value = entry.getValue();
        System.out.printf("Number %d occurs %d times\n", key, value);
    }
}
0 голосов
/ 27 мая 2018

Вы присваиваете свой int из входных данных для вашего массива:

number[i] = input.nextInt();

Затем позже вы подсчитываете их через цикл:

for (i = 0; i < number.length; i++) {
    temp = number [i];
    count [temp]++;
}

Как видите, если число tempравно 12, вы увеличиваете значение count при индексе 12 на единицу.

Таким образом, в основном, count[i] = number of occurrence of number i

Поэтому, когда вы печатаете массив count,вы видите их в естественном порядке.

Если вы хотите распечатать свои предметы в порядке встречи, я предлагаю вам использовать Map для хранения вхождения:

Map<Integer, Integer> count = new LinkedHashMap<>(); // LinkedHashMap remember the insert order

for (i = 0; i < number.length; i++) {
    temp = number [i];
    if (count.contains(temp)) {
        count.put(temp, count.get(temp) + 1);
    } else {
        count.put(temp, 1);
    }
}

И вы можетераспечатайте их по порядку:

for (Entry<Integer, Integer> entry : count.entrySet()) {
     // entry.getKey is the number
     // entry.getValue is the occurence
}
...