ArrayList <Integer>не хранит введенные пользователем целые числа в Java 8 (1.8) - PullRequest
1 голос
/ 24 февраля 2020

* РЕДАКТИРОВАТЬ - РЕШЕНО: После создания экземпляра Scanner Object я использовал разделитель следующим образом:

scanner.useDelimiter("");

До этого я пробовал разделитель, который выглядел примерно так (точный код доступно в переполнении стека):

scanner.useDelimiter("\\p{javaWhitespace}");

... но это не очень хорошо работает.

Спасибо всем. Если у вас возникла та же проблема, попробуйте первый разделитель. Если это не сработает, обновите JDK до 13, а затем попробуйте снова.

Хорошо, моя цель состоит в том, чтобы пользователь ввел номер кредитной карты, который я хотел бы сохранить в ArrayList of Integers и впоследствии передайте этот список моим функциям, которые будут выполнять алгоритм Луна для проверки предоставленного числа. Как только пользователь нажимает Enter, обработка начинается. Это консольное приложение, ничего особенного.

Все прекрасно работает ... кроме пользовательского ввода. Ни один пользовательский ввод не сохраняется в объявленном ArrayList. Я вставил сообщение для печати, чтобы дать мне размер списка сразу после соответствующего while-l oop и .... yep, 0. Я также передаю этот список в пользовательскую функцию lengthChecker(ArrayList<Integer> list){} после соответствующей while-l oop и печатает мое собственное сообщение об ошибке.

Я объявил локальные переменные int в области while-l oop, и это не сильно помогло. Я попытался получить вводимые пользователем данные в виде строк и сохранить их в ArrayList<String> list; с последующим анализом ввода, но это не сработало (особенно потому, что мне нужно, чтобы клавиша Enter действовала как разделитель, чтобы можно было выполнить следующие шаги )

В любом случае, вот код рассматриваемой функции. Я упускаю что-то очевидное или я просто перестал программировать?

    public void userInput() {

        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<Integer>();

        System.out.println("Please input the card-number to be checked then press Enter: ");    

        while(scanner.hasNextInt()) {

            list.add(scanner.nextInt());
        }

        System.out.println("Length of list: " + list.size());


        listLengthChecker(list);
        scanner.close();

  }

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Это пока l oop, пока вы не введете любое нецелое значение. Вы закончили ввод всех целочисленных значений, и тогда ваша программа напечатает ваши элементы списка.

0 голосов
/ 24 февраля 2020

У меня нет полного контекста всего кода, который вы написали, чтобы решить вашу проблему, но я могу догадаться, что происходит. Если вы хотите запустить какой-либо пользовательский ввод-вывод (например, сканер), это должно происходить в рамках метода main. Я могу только предположить, что вы выполняете свою функцию userInput() в методе main в своем классе. Однако, поскольку ваша функция userInput() не имеет ключевого слова static в своем определении, к ней нельзя получить доступ без инициализации объекта класса - но, насколько я могу судить из вашего кода, объекта нет что метод может ссылаться на. Добавьте ключевое слово static (т.е. инициализируйте метод как public static void userInput()), чтобы иметь возможность запускать функцию по назначению.

Что касается пока l oop - есть небольшая вероятность того, что это разница в Java версиях (я использую Java 11), но while(scanner.hasNextInt()) не перестанет быть истинным в конце вашей строки или при нажатии клавиши ввода - только когда вы вставляете что-то (например, символ), которое не может интерпретироваться как целое число.

...