Проверка, что значение является таким примитивом, не сработает. Java не сможет сравнивать значение с типом таким образом.
Один из способов - воспользоваться статической функцией Integer.parseInt(String s)
, чтобы проверить, было ли введено соответствующее значение типа int. Обратите внимание, что он выбрасывает NumberFormatException
. Если вы можете воспользоваться этим фактом, вы можете узнать, было ли предоставлено целое число из функции.
try {
//Attempt the parse here
} catch (...) {
//Not a proper integer
}
Второй метод (поскольку вы уже пользуетесь классом Scanner
) - это использование Scanner
методов hasNextInt()
и nextInt()
, чтобы определить:
- У
Scanner
есть новое целое число в потоке
- Получить фактическое целочисленное значение из потока
Пример использования:
if (myScanner.hasNextInt()) {
int totalAmount = myScanner.nextInt();
// do stuff here
} else {
//Int not provided
}
Как вы упомянули в своем обновлении, все в порядке, если ввод от Scanner
равен , разделенному пробелами. По умолчанию сканер разделяет значения в потоке пробелами. Что происходит, когда у вас есть другой разделитель (например, "," или "//" и т. Д.), Который логически разделяет два уникальных значения в потоке?
Решением этой проблемы является изменение разделителя, используемого Scanner
. Существует метод с именем useDelimiter(String pattern)
, который позволяет указать, как значения будут логически разделяться в потоке. Это очень полезно для случаев, подобных тем, с которыми вы работаете (или для случаев, когда пробелы не разделяют значения).
Использование будет выглядеть примерно так:
Scanner myScanner = ...; # Get this how you normally would
String delimiter = ...; # Decide what the separator will be
myScanner.useDelimiter(delimiter); # Tell the Scanner to use this separator
Есть хороший пример этого в API Scanner
(см. Первую ссылку на Scanner
, которую я включил для этого примера), который описывает, как это используется. Я предлагаю проверить это, и это будет очень приятно для вас (я верю).