JavaRush/Java блог/Архив info.javarush/Кухня(); Задание N27.
terranum
28 уровень

Кухня(); Задание N27.

Статья из группы Архив info.javarush
участников
Кухня(); Задание N27. - 1 Правила [Одномерные массивы] 27. Дан массив действительных чисел. Среди них есть равные. Найти первый максимальный элемент массива и заменить его нулем.
Комментарии (17)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
RabenokDmitry
Уровень 21
12 февраля 2015, 23:04
public static void zaroFirstMax(double[] array) {
        if (array.length == 0)
            throw new IllegalArgumentException("Массив нулевой длины!");
        double max = array[0];
        int indexMax = 0;
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
                indexMax = i;
            }
        }
        array[indexMax] = 0.0;

    }
Sultan
Уровень 16
29 августа 2014, 20:10
кто-нибудь, скажите ему, что в задании нет слова «локальный»
Tan4ek
Уровень 20
29 августа 2014, 20:12
Найти первый максимальный элемент массива и заменить его нулем.
Sultan
Уровень 16
29 августа 2014, 20:24
это значит, может быть несколько равных чисел, которые больше всех остальных в массиве
Tan4ek
Уровень 20
29 августа 2014, 20:24
Понял! Sultan прошу прощения!
terranum
Уровень 28
29 августа 2014, 20:26
Фишка в том что максимальных чисел может быть несколько, понимай это как [0, 1, 2, 88, 2, 88]. Максимум один и равняется 88, а чисел равных максимуму 2. Элемент под индексом 3 — первый максимум.
Sultan
Уровень 16
29 августа 2014, 19:45
public static void kitchen27(double[] arr) {
    int m = 0;
    for (int i = 1; i < arr.length; i++) {
        m = arr[i] > arr[m] ? i : m;
    }
    arr[m] = 0.0;
}
Tan4ek
Уровень 20
29 августа 2014, 19:54
Метод пробегает по всему массиву и если есть более одного локального максимума он занулит последний из них, как я понимаю.
Sultan
Уровень 16
29 августа 2014, 20:00
нет, о локальных максимумах вообще речи не идет, и обнуляется первый максимум, потому что хранится индекс первого максимума, если дальше встретится равное ему число, то оно будет пропущено, поскольку условие изменения сохраняемого индексa arr[i] > arr[m]
Tan4ek
Уровень 20
29 августа 2014, 20:03
Ок, но если второй максимум больше первого, занулится второй
Tan4ek
Уровень 20
29 августа 2014, 19:35
public static double localMaximum(double... array){
        for (int count = 1; count < array.length - 1; count++){
            if (array[count - 1] > array[count + 1] && array[count - 1] > array[count]) {
                double localMax = array[count - 1];
                array[count - 1] = 0;
                return localMax;
            }
            
            if (count == array.length - 2) {
                double localMax = array[count];
                array[count] = 0;
                return localMax;
            }
        }
        return array[0];
    }
Sultan
Уровень 16
29 августа 2014, 19:37
смотри, выделяешь весь метод, который ты хочешь показать здесь, не снимая выделение жмешь shift+tab, копируешь(или вырезаешь), если хочешь обратно жмешь tab, чтобы обратно подвинуть, если ты копировал
Tan4ek
Уровень 20
29 августа 2014, 19:38
Последнее значение пропускает
Sultan
Уровень 16
29 августа 2014, 19:41
и ты, кажется, не понял задание
Tan4ek
Уровень 20
29 августа 2014, 19:50
Как всегда собственно (
Tan4ek
Уровень 20
29 августа 2014, 19:55
Понял, спасибо!
Sultan
Уровень 16
29 августа 2014, 19:13
Yummy! Hooray!