@Janna1603

Как закончить программу «Максимальное значение»?

import java.util.ArrayList;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<Integer> array = new ArrayList<>();
        
        System.out.println("Введите числа");
        
        while (true) {
            int number = input.nextInt();
            array.add(number);
            
            if (number == 0) {
                break;
            }
            
            int max = 0;
            
            for (int i = 0; i < array.length; i++) {
                if (array.get(i) > max) {
                    max = array.get(i);
                }
            }
        }
    }
}


Уже третий день пытаюсь решить задачу. Мы должны ввести цифры, когда вводим ноль, программа останавливается и сравнивает числа, после чего выводит максимальное значение. Искала в интернете как найти максимальное значение в массиве, у всех через .length а у меня он не работает, выделяется красным.
  • Вопрос задан
  • 305 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Billy_Milligan
У класса ArrayList нет поля length (Если бы это был массив int[], можно использовать length), для определения размера у List нужно использовать метод size().
for([инициализация] ; [условие при котором мы продолжаем цикл] ; [шаг])
Как это работает
  1. [инициализация] - выполняется самым первым и только 1 раз.
  2. [условие при котором мы продолжаем цикл] - проверяем условие
  3. (выполняем код внутри цикла)
  4. [шаг]
  5. [условие при котором мы продолжаем цикл] - проверяем условие
  6. (выполняем код внутри цикла)
  7. [шаг]
  8. ...


Scanner input = new Scanner(System.in);
ArrayList<Integer> array = new ArrayList<>();
int max = 0;

System.out.println("Введите числа");

for(int number = input.nextInt() ; number != 0; number = input.nextInt()) {
     array.add(number);
}

for (int i = 0; i < array.size(); i++) {
      if (array.get(i) > max) {
           max = array.get(i);
      }
}

System.out.println("Это число: "+max);
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!

Вот, ваш исходый код:
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList array = new ArrayList<>();
        System.out.println("Введите числа");
        while (true) {
            int number = input.nextInt();
            array.add(number);
            if (number == 0) {
                break;
            }
            int max = 0;
            
            for (int i = 0; i < array.length; i++) {
                if (array.get(i) > max) {
                    max = array.get(i);
                }
            }

        }
    }

}


Вы пытаетесь получить размер используя length, но при этом используете объект ArrayList. У ArrayList для получения размера нужно использовать size()
Ошибка:
i < array.length;
Либо создавайте массив чисел, либо если используете ArrayList (списочный массив), то вызывайте метод size() для получения размера списка.

Также обратите внимание, что вы пытаетесь сравнить числа находясь внутри цикла, но при этом до выполнения кода сравнения вы вводите ноль и выходите их массива.

Добавил комментарии в код:
if (number == 0) {
                break; // вышли из цикла
            }

            // до сюда код не исполнится, так как выше break и вы вышли из цикла
            int max = 0;
            for (int i = 0; i < array.length; i++) {
                if (array.get(i) > max) {
                    max = array.get(i);
                }
            }


А тут вам нужно передать параметризованный тип (желательно)
До -
ArrayList array = new ArrayList<>();
После -
ArrayList<Integer> array = new ArrayList<>();

Что касается получения максимального значения числа, то почему бы вам не воспользоваться возможностями пакета Math ? В частности метод max() или например, метод max() в Collections.

Вот, рабочий код:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        ArrayList<Integer> array = new ArrayList<>();
        System.out.println("Введите числа");

        while (true) {
            int number = input.nextInt();
            array.add(number);

            if (number == 0) {
                break;
            }
        }

        int maxValue = Collections.max(array);
        System.out.println("Максимальное число " + maxValue);

    }

}


Если вы хотите найти макс. значение самой итерируя по списку, то вот, другое решение
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        ArrayList<Integer> array = new ArrayList<>();
        System.out.println("Введите числа");

        while (true) {
            int number = input.nextInt();
            array.add(number);

            if (number == 0) {
                break;
            }
        }

        /*int maxValue = Collections.max(array);
        System.out.println("Максимальное число " + maxValue);*/

        int maxValue = 0;
        for (int i : array) {
            if (array.get(i) > maxValue) {
                maxValue = array.get(i);
            }
        }
        System.out.println("Максимальное число " + maxValue);
    }

}
Ответ написан
Комментировать
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы