Обработка преобразования строкового ввода
В реальных приложениях часто требуется получать ввод от пользователя, и обычно этот ввод считывается как String
. Чтобы выполнить числовые проверки, например, определить, представляет ли ввод целое число, сначала нужно преобразовать String
в числовой тип, например, double
.
В этом шаге мы модифицируем нашу программу, чтобы она принимала ввод пользователя в виде String
, преобразовывала его в double
, а затем использовала Math.floor()
для проверки, представляет ли исходный ввод целое число.
Откройте файл IntegerCheck.java
в редакторе WebIDE.
Замените существующий код следующим:
import java.util.Scanner; // Import the Scanner class
public class IntegerCheck {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // Create a Scanner object
System.out.print("Enter a number: "); // Prompt the user for input
String input = scanner.nextLine(); // Read user input as a String
try {
// Convert the String input to a double
double number = Double.parseDouble(input);
// Check if the number is an integer using Math.floor()
if (number == Math.floor(number)) {
System.out.println("The input '" + input + "' represents an integer.");
} else {
System.out.println("The input '" + input + "' does not represent an integer.");
}
} catch (NumberFormatException e) {
// Handle cases where the input is not a valid number
System.out.println("Invalid input: '" + input + "' is not a valid number.");
} finally {
scanner.close(); // Close the scanner
}
}
}
Рассмотрим новые части кода:
import java.util.Scanner;
: Эта строка импортирует класс Scanner
, который используется для чтения ввода с консоли.
Scanner scanner = new Scanner(System.in);
: Это создает объект Scanner
, который читает ввод из стандартного потока ввода (System.in
), который обычно представляет клавиатуру.
System.out.print("Enter a number: ");
: Эта строка приглашает пользователя ввести число.
String input = scanner.nextLine();
: Эта строка считывает всю введенную пользователем строку ввода как String
и сохраняет ее в переменной input
.
try { ... } catch (NumberFormatException e) { ... }
: Это блок try-catch
. Он используется для обработки потенциальных ошибок. В данном случае мы пытаемся преобразовать строковый ввод в double
. Если ввод не является допустимым числом (например, "hello"), возникнет исключение NumberFormatException
, и код внутри блока catch
будет выполнен.
double number = Double.parseDouble(input);
: Это важная часть преобразования. Double.parseDouble()
- это статический метод класса Double
, который пытается преобразовать String
в значение типа double
.
finally { scanner.close(); }
: Блок finally
гарантирует, что метод scanner.close()
будет вызван, освобождая системные ресурсы, используемые объектом Scanner
, независимо от того, произошло исключение или нет.
Сохраните файл IntegerCheck.java
.
Теперь скомпилируйте и запустите программу из терминала в директории ~/project
:
javac IntegerCheck.java
java IntegerCheck
Теперь программа будет ждать, пока вы введете данные.
Попробуйте ввести целое число, например, 42
, и нажмите Enter. Вывод должен быть таким:
Enter a number: 42
The input '42' represents an integer.
Запустите программу еще раз и введите нецелое число, например, 3.14
, и нажмите Enter. Вывод должен быть таким:
Enter a number: 3.14
The input '3.14' does not represent an integer.
Запустите программу еще раз и введите что-то, что не является числом, например, test
, и нажмите Enter. Вывод должен быть таким:
Enter a number: test
Invalid input: 'test' is not a valid number.
Это демонстрирует, как обработать ввод пользователя в виде String
, преобразовать его в числовой тип, применить нашу проверку с использованием Math.floor()
и при этом обработать потенциальные ошибки из-за некорректного ввода.