Обработка преобразования строкового ввода
В реальных приложениях часто требуется получать ввод от пользователя, и обычно этот ввод считывается как 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() и при этом обработать потенциальные ошибки из-за некорректного ввода.