소개
이 랩에서는 Java 에서 숫자가 정수인지 확인하는 방법을 배우게 됩니다. Math.floor() 메서드를 사용하여 정수 값을 확인하는 것부터 시작하여 다양한 기술을 탐구할 것입니다. double 및 float 데이터 유형을 모두 사용하여 이 메서드가 서로 다른 부동 소수점 표현에서 어떻게 작동하는지 실습할 것입니다. 마지막으로, 문자열 입력을 처리하고 정수 확인을 수행하기 전에 숫자 유형으로 변환하는 방법을 다룰 것입니다. 이 랩은 Java 프로그램에서 숫자 데이터를 검증하기 위한 실용적인 기술을 제공할 것입니다.
Math.floor() 를 사용하여 정수 확인
이 단계에서는 Math.floor() 메서드를 사용하여 Java 에서 숫자가 정수인지 확인하는 방법을 살펴보겠습니다. 이는 프로그래밍, 특히 사용자 입력 또는 계산을 처리할 때 흔히 사용되는 작업입니다.
먼저, Math.floor()가 무엇을 하는지 이해해 봅시다. Java 의 Math.floor() 메서드는 인자보다 작거나 같은 가장 큰 정수를 반환합니다. 예를 들어, Math.floor(5.9)는 5.0을 반환하고, Math.floor(5.0)은 5.0을 반환합니다.
이 속성을 사용하여 숫자가 정수인지 확인할 수 있습니다. 숫자가 정수이면 Math.floor()를 적용하면 동일한 숫자가 반환됩니다. 숫자에 소수 부분이 있으면 Math.floor()는 더 작은 정수를 반환합니다.
이를 실습하기 위해 새로운 Java 파일을 만들어 보겠습니다. WebIDE 를 열고 ~/project 디렉토리에 IntegerCheck.java라는 새 파일을 만듭니다.
이제 다음 코드를 복사하여 IntegerCheck.java 파일에 붙여넣습니다.
public class IntegerCheck {
public static void main(String[] args) {
double number1 = 10.0;
double number2 = 10.5;
// Check if number1 is an integer
if (number1 == Math.floor(number1)) {
System.out.println(number1 + " is an integer.");
} else {
System.out.println(number1 + " is not an integer.");
}
// Check if number2 is an integer
if (number2 == Math.floor(number2)) {
System.out.println(number2 + " is an integer.");
} else {
System.out.println(number2 + " is not an integer.");
}
}
}
코드를 분석해 보겠습니다.
double number1 = 10.0;및double number2 = 10.5;: 두 개의double변수를 선언합니다. 하나는 정수 값을 나타내고 다른 하나는 정수가 아닌 값을 나타냅니다.if (number1 == Math.floor(number1)): 이것이 핵심 로직입니다. 원래 숫자 (number1) 를Math.floor(number1)의 결과와 비교합니다. 두 값이 같으면 숫자는 정수입니다.System.out.println(...): 이 줄은 결과를 콘솔에 출력합니다.
IntegerCheck.java 파일을 저장합니다.
이제 프로그램을 컴파일하고 실행해 보겠습니다. WebIDE 에서 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.
javac를 사용하여 코드를 컴파일합니다.
javac IntegerCheck.java
컴파일이 성공하면 ~/project 디렉토리에 IntegerCheck.class라는 새 파일이 표시됩니다.
이제 java를 사용하여 컴파일된 코드를 실행합니다.
java IntegerCheck
다음 출력을 볼 수 있습니다.
10.0 is an integer.
10.5 is not an integer.
이 출력은 Math.floor()를 사용한 로직이 double 값이 정수를 나타내는지 여부를 올바르게 식별함을 확인합니다.
Double 및 Float 타입으로 테스트
이전 단계에서는 double 값과 함께 Math.floor()를 사용했습니다. Java 에는 double 및 float를 포함하여 숫자를 나타내는 다양한 데이터 유형이 있습니다. 둘 다 부동 소수점 숫자 (소수점이 있는 숫자) 에 사용되지만 double은 float보다 더 많은 정밀도를 제공합니다.
IntegerCheck.java 프로그램을 수정하여 double 및 float 유형 모두로 테스트하여 Math.floor()가 각 유형에서 어떻게 작동하는지 확인해 보겠습니다.
WebIDE 편집기에서 IntegerCheck.java 파일을 엽니다.
기존 코드를 다음으로 바꿉니다.
public class IntegerCheck {
public static void main(String[] args) {
double doubleNumber1 = 20.0;
double doubleNumber2 = 20.75;
float floatNumber1 = 30.0f; // Note the 'f' suffix for float literals
float floatNumber2 = 30.25f;
// Check if doubleNumber1 is an integer
if (doubleNumber1 == Math.floor(doubleNumber1)) {
System.out.println(doubleNumber1 + " (double) is an integer.");
} else {
System.out.println(doubleNumber1 + " (double) is not an integer.");
}
// Check if doubleNumber2 is an integer
if (doubleNumber2 == Math.floor(doubleNumber2)) {
System.out.println(doubleNumber2 + " (double) is an integer.");
} else {
System.out.println(doubleNumber2 + " (double) is not an integer.");
}
// Check if floatNumber1 is an integer
// Math.floor() takes a double, so the float is promoted to double
if (floatNumber1 == Math.floor(floatNumber1)) {
System.out.println(floatNumber1 + " (float) is an integer.");
} else {
System.out.println(floatNumber1 + " (float) is not an integer.");
}
// Check if floatNumber2 is an integer
if (floatNumber2 == Math.floor(floatNumber2)) {
System.out.println(floatNumber2 + " (float) is an integer.");
} else {
System.out.println(floatNumber2 + " (float) is not an integer.");
}
}
}
float 리터럴 값 (30.0f, 30.25f) 뒤에 있는 f 접미사를 확인하십시오. 이는 Java 에서 숫자가 double(부동 소수점 리터럴의 기본값) 이 아닌 float임을 나타내기 위해 필요합니다.
또한 Math.floor()가 double 인수를 사용하도록 정의되어 있음을 확인하십시오. float를 Math.floor()에 전달하면 Java 는 메서드가 실행되기 전에 자동으로 float를 double로 승격시킵니다. floatNumber1 == Math.floor(floatNumber1) 비교는 Math.floor()의 결과 (double) 가 floatNumber1과 비교되기 때문에 여전히 작동합니다 (비교를 위해 double로 승격됨).
IntegerCheck.java 파일을 저장합니다.
이제 ~/project 디렉토리의 터미널에서 수정된 프로그램을 컴파일하고 실행합니다.
javac IntegerCheck.java
java IntegerCheck
다음과 유사한 출력을 볼 수 있습니다.
20.0 (double) is an integer.
20.75 (double) is not an integer.
30.0 (float) is an integer.
30.25 (float) is not an integer.
이는 Math.floor() 비교 메서드가 double 및 float 유형 모두에 대해 올바르게 작동함을 보여줍니다.
String 입력 변환 처리
실제 응용 프로그램에서는 종종 사용자로부터 입력을 받아야 하며, 이 입력은 일반적으로 String으로 읽힙니다. 입력이 정수를 나타내는지 확인하는 것과 같은 숫자 검사를 수행하려면 먼저 String을 double과 같은 숫자 유형으로 변환해야 합니다.
이 단계에서는 프로그램을 수정하여 사용자 입력을 String으로 받고, 이를 double로 변환한 다음 Math.floor()를 사용하여 원래 입력이 정수를 나타내는지 확인합니다.
WebIDE 편집기에서 IntegerCheck.java 파일을 엽니다.
기존 코드를 다음으로 바꿉니다.
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);: 이는 일반적으로 키보드인 표준 입력 스트림 (System.in) 에서 입력을 읽는Scanner객체를 생성합니다.System.out.print("Enter a number: ");: 이 줄은 사용자에게 숫자를 입력하라는 메시지를 표시합니다.String input = scanner.nextLine();: 이는 사용자가 입력한 전체 입력 줄을String으로 읽어input변수에 저장합니다.try { ... } catch (NumberFormatException e) { ... }: 이는try-catch블록입니다. 잠재적인 오류를 처리하는 데 사용됩니다. 이 경우String입력을double로 변환하려고 합니다. 입력이 유효한 숫자가 아니면 (예: "hello")NumberFormatException이 발생하고catch블록 내부의 코드가 실행됩니다.double number = Double.parseDouble(input);: 이는 변환에 중요한 부분입니다.Double.parseDouble()은String을double값으로 변환하려고 시도하는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() 검사를 적용하는 동시에 잘못된 입력으로 인한 잠재적인 오류를 처리하는 방법을 보여줍니다.
요약
이 Lab 에서는 Math.floor() 메서드를 사용하여 Java 에서 숫자가 정수인지 확인하는 방법을 배웠습니다. 정수의 경우 Math.floor()가 동일한 값을 반환하고, 정수가 아닌 경우 더 작은 정수를 반환한다는 개념을 탐구했습니다. 우리는 이 로직을 Java 프로그램에서 구현하여 원래 숫자와 Math.floor()의 결과를 비교하여 정수인지 확인했습니다.



