Отображение положения элементов массива в Java - PullRequest
0 голосов
/ 12 февраля 2012

Я пытаюсь отобразить номера позиций (индексов) самых больших значений в массиве.Это массив из 100 случайных чисел.По некоторым причинам вывод верен после первых нескольких чисел.Я всегда получаю неправильные числа в начале вывода.Это код, который у меня есть;Спасибо

public static void main(String[] args) {
    int max = 0;
    int array[] = new int[100];
    System.out.println();

    // code to display student responses
    randomNum(array);

    System.out.println(" Survey Responses - 100 Students: ");
    response(array);

    System.out.println("Positions of the highest numbers");
    System.out.println();

    for (int i = 0; i < array.length; i++) {
        max = Math.max(max, array[i]);
        if (array[i] == max) {
            System.out.println(i);
        }
    }
}

private static void randomNum(int A[]) {
    for (int i = 0; i < A.length; i++) {
        A[i] = (int) (Math.random() * 10000) % 10 + 1;
    }

}

public static void response(int[] resp) {
    for (int x = 0; x < resp.length; x++) {
        System.out.print(resp[x] + " ");
    }
    System.out.println();
}

Ответы [ 3 ]

1 голос
/ 12 февраля 2012

Выполните два цикла, например:

for (int i = 0; i < array.length; i++) {
    max = Math.max(max, array[i]);
}
for (int i = 0; i < array.length; i++) {
    if (array[i] == max) {
        System.out.println(i);
    }
}

До сих пор вы выводили индексы максимального числа, видимого в префиксе, а не индексы значений, равные общему максимуму.

0 голосов
/ 12 февраля 2012

Ваш алгоритм неверен.Когда вы выводите значения, вы просматриваете массив, а затем сравниваете текущее значение 'max' с текущим элементом массива.Так что если у вас был массив только 10 чисел (для простоты), который был бы

1,2,3,4,5,6,7,8,9,10

В первомПри обходе цикла вы сравниваете текущее значение 'max' (0) с первым элементом массива (1) и печатаете 1 и устанавливаете max в 1. Во второй раз вы получаете текущее значение max (1) ко второму элементу массива (2) и выведите 2 и установите max на 2. То же самое происходит для каждой итерации цикла, и вы в конечном итоге выведите все значения.

регистр

10,9,8,7,6,5,4,3,2,1

, который содержит те же числа в другом порядке, вы бы напечатали только 10потому что вы установили максимальное значение 10 в самый первый раз в цикле.

0 голосов
/ 12 февраля 2012

Разве вам не было бы проще отсортировать массив (только для пояснения)?Тогда у вас есть элемент min с индексом 0 и максимум с arr.length-1, что-то вроде этого:

java.util.Arrays.sort(arr);
final int min = (arr.length > 0) ? arr[0] : 0;
final int max = (arr.length > 0) ? arr[arr.length-1] : 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...