Lidar com a Conversão de Entrada de String
Em aplicações do mundo real, você frequentemente precisa obter entrada do usuário, e essa entrada é tipicamente lida como uma String. Para realizar verificações numéricas, como determinar se a entrada representa um inteiro, você primeiro precisa converter a String para um tipo numérico, como double.
Neste passo, modificaremos nosso programa para receber a entrada do usuário como uma String, convertê-la para double e, em seguida, usar Math.floor() para verificar se a entrada original representava um inteiro.
Abra o arquivo IntegerCheck.java no editor WebIDE.
Substitua o código existente pelo seguinte:
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
}
}
}
Vamos analisar as novas partes do código:
import java.util.Scanner;: Esta linha importa a classe Scanner, que é usada para ler a entrada do console.
Scanner scanner = new Scanner(System.in);: Isso cria um objeto Scanner que lê a entrada do fluxo de entrada padrão (System.in), que normalmente é o teclado.
System.out.print("Enter a number: ");: Esta linha solicita que o usuário insira um número.
String input = scanner.nextLine();: Isso lê a linha inteira de entrada inserida pelo usuário como uma String e a armazena na variável input.
try { ... } catch (NumberFormatException e) { ... }: Este é um bloco try-catch. Ele é usado para lidar com possíveis erros. Neste caso, estamos tentando converter a entrada String para um double. Se a entrada não for um número válido (por exemplo, "hello"), uma NumberFormatException ocorrerá, e o código dentro do bloco catch será executado.
double number = Double.parseDouble(input);: Esta é a parte crucial para a conversão. Double.parseDouble() é um método estático da classe Double que tenta converter uma String em um valor double.
finally { scanner.close(); }: O bloco finally garante que o método scanner.close() seja chamado, liberando os recursos do sistema usados pelo Scanner, independentemente de uma exceção ter ocorrido ou não.
Salve o arquivo IntegerCheck.java.
Agora, compile e execute o programa a partir do Terminal no diretório ~/project:
javac IntegerCheck.java
java IntegerCheck
O programa agora esperará que você insira uma entrada.
Tente inserir um inteiro, como 42, e pressione Enter. A saída deve ser:
Enter a number: 42
The input '42' represents an integer.
Execute o programa novamente e insira um número não inteiro, como 3.14, e pressione Enter. A saída deve ser:
Enter a number: 3.14
The input '3.14' does not represent an integer.
Execute o programa mais uma vez e insira algo que não seja um número, como test, e pressione Enter. A saída deve ser:
Enter a number: test
Invalid input: 'test' is not a valid number.
Isso demonstra como lidar com a entrada do usuário como uma String, convertê-la para um tipo numérico e, em seguida, aplicar nossa verificação Math.floor() enquanto também lida com possíveis erros de entrada inválida.