Int эквивалентно string.isempty - PullRequest
       17

Int эквивалентно string.isempty

0 голосов
/ 19 апреля 2020

Я надеюсь, что это легко исправить. Я нашел способ обнаружить, что пользователь нажал клавишу ввода, когда ему было предложено ввести значение int. Я знаю, что .isEmpty не работает со значениями, объявленными как int, каков наилучший способ обойти это?

System.out.println("Please enter the first number:");
    user_number1 = input.nextInt();
        if (user_number1.isEmpty){

        }

Ответы [ 3 ]

3 голосов
/ 19 апреля 2020

Нет возможности для int быть пустым. input.nextInt() не будет продолжаться, пока пользователь не введет значение, которое не является пробелом. Если это не int, он выдаст InputMismatchException. Это задокументировано в Scanner.nextInt() Javado c. Вы можете проверить, есть ли int с Scanner.hasNextInt(), прежде чем пытаться использовать следующий токен.

while (true) {
    System.out.println("Please enter the first number:");
    if (input.hasNextInt()) {
        user_number1 = input.nextInt();
        break;
    } else {
        System.out.println("not an int: " + input.nextLine());
    }
}
0 голосов
/ 19 апреля 2020

Я предлагаю вам использовать nextLine() вместо nextInt(), next() et c. Проверьте Сканер пропускает nextLine () после использования next () или nextFoo ()? , чтобы узнать больше об этом.

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int first = getInteger(input, "Please enter the first number:");
        System.out.println("You entered " + first);
        int second = getInteger(input, "Please enter the second number:");
        System.out.println("You entered " + second);
    }

    static int getInteger(Scanner input, String prompt) {
        boolean valid;
        int n = 0;
        do {
            valid = true;
            System.out.print(prompt);
            try {
                n = Integer.parseInt(input.nextLine());
            } catch (NumberFormatException e) {
                System.out.println("This is not an integer. Please try again.");
                valid = false;
            }
        } while (!valid);
        return n;
    }
}

Пример выполнения:

Please enter the first number:a
This is not an integer. Please try again.
Please enter the first number:10.5
This is not an integer. Please try again.
Please enter the first number:
This is not an integer. Please try again.
Please enter the first number:10
You entered 10
Please enter the second number:
This is not an integer. Please try again.
Please enter the second number:40.5
This is not an integer. Please try again.
Please enter the second number:20
You entered 20
0 голосов
/ 19 апреля 2020

Как говорится в ответе @Elliott Frisch, вызов .nextInt() просто не вернется, пока не будет введено действительное число какого-либо рода (или, если пользователь отправит что-то еще, вместо этого произойдет InputMismatchException.

Одной простой альтернативой является просто .. не вызывать .nextInt() затем. Call .next(), проверить, является ли полученная строка пустой, и, если нет, превратить ее в целое число, используя: int userNumber = Integer.parseInt(theStringYouGotFromScannerNext);.

NB1: Java соглашение гласит, что переменная имеет имя 'userNumber1', а не 'user_number1'. Когда в Риме и все такое.

NB2: если вы хотите, чтобы ваш сканер читал 1 ответ каждый раз пользователь нажимает ввод, звоните scanner.useDelimiter("\r?\n"); сразу после new Scanner. Из коробки он дает вам 1 ответ на пробел, что обычно не то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...