Распечатать индекс из 2 максимальных значений

Мой вопрос в том, ввожу ли я два числа maxvalue в массив, например. 100, 10, 100. Как я могу получить вывод для печати обоих индексных чисел?

Ожидаемый результат будет 100 по индексу 1 и индексу 3. в индекс добавлен 1, так как я хочу, чтобы индекс начинался с единицы, а не с нуля

Храните индексы в структуре данных, а не как int (который может содержать только одно значение)

chevybow 30.07.2018 23:48

какой результат вы ожидаете?

Ousmane D. 30.07.2018 23:49

Кстати, int index=1; должен быть int index=0;, а index=i+1; действительно должен быть index=i;, поскольку вам нужно максимальное значение в массиве вместе с его индексом.

Ousmane D. 30.07.2018 23:53

Я не совсем понимаю, что OP ожидает от этого фрагмента кода, но я думаю, что int index = 1; правильно, потому что он добавляет первое значение массива, анализируемого как параметр, поэтому он может захотеть исключить его из своего поиска

Soutzikevich 30.07.2018 23:55

Ожидаемый результат будет 100 по индексу 1 и индексу 3.

Javakiddie 30.07.2018 23:56

Вы имеете в виду 0 и 2.

shmosel 30.07.2018 23:56

Хорошо, я понял. ОП хочет начать отсчет с 1, а не с 0. Вот почему он добавляет 1, он просто не упомянул об этом, потому что думал, что это говорит само за себя.

Soutzikevich 30.07.2018 23:57

Вы правы, я хочу начать с одного ненулевого обновленного поста

Javakiddie 31.07.2018 00:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
8
73
2

Ответы 2

Добавьте это к инициализации.

HashSet<Integer> maxIndices = new HashSet<Integer>();

Сделайте второй проход через массив пробега и любые максимальные значения add в HashSet.

Другой вариант - использовать HashMap, где первое целое число - это пробег, а второе значение - положительное целое число того, сколько было найдено.

Поскольку он выполняет только один проход, он может быть быстрее, даже если вы считаете каждый пробег, а не только тот, который в итоге окажется самым большим. Будет ли это, конечно, зависеть от данных, компилятора и условий окружающей среды во время выполнения.

В качестве возвращаемого значения вам понадобится либо пользовательский компонент Java Bean POJO, либо вы можете использовать Pair <> или Tuple <>. (См. Использование пар или двух кортежей в Java.)

Просто простая Java, использующая серию циклов для. Приведенный ниже метод вернет массив 2D int, каждая строка которого состоит из двух столбцов, самого высокого значения массива и соответствующего номера индекса массива.

public int[][] getAllMaxValues(int[] allValues) {
    int maxVal = 0;
    int counter = 0;
    // Get the Max value in array...
    for (int i = 0; i < allValues.length; i++) {
        if (allValues[i] > maxVal) { 
            maxVal = allValues[i]; 
        }
    } 

    // How many of the same max values are there?
    for (int i = 0; i < allValues.length; i++) {
        if (allValues[i] == maxVal) {
            counter++;
        }
    }

    // Place all the max values and their respective
    // indexes into a 2D int array...
    int[][] result = new int[counter][2];
    counter = 0;
    for (int i = 0; i < allValues.length; i++) {
        if (allValues[i] == maxVal) {
            result[counter][0] = maxVal;
            result[counter][1] = i;
            counter++;
        }
    }

    // Return the 2D Array.
    return result;
}

Как вы можете использовать этот метод:

int[] allMiles = {100, 10, 100, 60, 20, 100, 34, 66, 74};
int[][] a = getAllMaxValues(allMiles);

for (int i = 0; i < a.length; i++) {
    System.out.println("Array max value of " + a[i][0] + 
                       " is located at index: " + a[i][1]);
}

В окне консоли будет отображаться:

Array max value of 100 is located at index: 0
Array max value of 100 is located at index: 2
Array max value of 100 is located at index: 5

Другие вопросы по теме