Как написать программу «Максимальное значение»?
Я и сам изучаю Java и хочу акцентировать ваше внимание на следующих пунктах:

Во-первых, 
ArrayList<String> myList Вы создаете ArrayList с параметрированным типом данных String.

Отсюда возможны слудующие проблемы в дальнейшем:

1) Как убедиться, что пользователь введет именно число, а не слово. Если вы хотите использовать именно тип String, то стоит использовать также regexp и метод matches() и проверять на то, что пользователь ввел именно цифру или число.

2) Как сравнить числа, если они являются переменными типа String? 
Разве, что нужно будет итерировать по списку и использовать Integer.parseInt(str) Ведь, сравнить строки вы не можете и вам придется привести строки к типу int.

3) if(number == "!")
Строки лучше сравнивать используя метод equals(). Вам не удается выйти из цикла именно из-за этого. используйте equals()

Наверное, лучше сразу принимать int  используя sc.nextInt(), а из цикла выходить другим способом. Например, нажатием кнопки, которую вы назначите на выход из цикла. Например, добавив event listener для кнопки Enter и по нажатию кнопки выходите из цикла. А далее итерировать по списку и сравнить данные и выдать макс. значение
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<Integer> myList = new ArrayList<>();
        while (true) {
            System.out.print("Введите число: ");
            String number = input.next();
            if (number.equals("!")) {   //Используйте IDE и не забивайте на её подсказки.
                                        // Хочу вам предложить перейти на Python или Kotlin.
                                        // По крайне мере на первое время там не будет возникать вопросов, "почему equals".
                break;
            } else {
                String trim = number.trim();//Убрать пробелы и прочее по бокам (можно и не использовать)
                int e = Integer.parseInt(trim); // Спарсить число
                myList.add(e);
            }
        }
        int max = max(myList);  // вместо самописной функции можно было бы использовать стримы, но так пока что проще.
                                // и опять же повод посмотреть в сторону Kotlin
        System.out.println(max);
    }

    private static int max(List<Integer> arr) {
        int max = Integer.MIN_VALUE;
        for (int i : arr) {
            if (i > max) max = i;
        }
        return max;
    }
}