Notice
Recent Posts
Recent Comments
Link
Everything has an expiration date
050 - ★ Java 반복문 while을 이용하여 사용자가 입력한 정수 값이 소수인지 아닌 지를 판별하는 프로그램 본문
[Java]/Program source (java)
050 - ★ Java 반복문 while을 이용하여 사용자가 입력한 정수 값이 소수인지 아닌 지를 판별하는 프로그램
Jelly-fish 2023. 8. 31. 12:25/*=========================================
■■■ 실행 흐름의 컨트롤(제어문) ■■■
- 반복문(while문) 실습 및 관찰
===========================================*/
// ※ 소수 : 1 또는 자기 자신의 값 이외에 어떤 수로도
// 나누어 떨어지지 않는 수.
// 단, 1은 소수 아님.
// 사용자로부터 임의의 정수를 입력받아
// 입력받은 정수가 소수인지... 아닌지... 를 판별하여
// 결과를 출력하는 프로그램을 구현한다.
// 실행 예)
// 임의의 정수 입력 : 10
// 10 → 소수 아님
// 임의의 정수 입력 : 11
// 11 → 소수
// 계속하려면 아무 키나 누르세요...
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Test050
{
public static void main(String[] args) throws IOException
{
// 주요 변수 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num; //-- 사용자의 입력값을 담아낼 변수
int n = 2; //-- 입력값을 대상으로 나눗셈 연산을 수행할 변수
// 2 부터 시작해서 1씩 증가
// ex) 입력값 27 → n : 2 3 4 5 6 7 8 ... 23 24 25 26
// 연산 및 처리
System.out.print("임의의 정수 입력 : ");
num = Integer.parseInt(br.readLine());
// 어떤 값을 입력받은 상태인지 알 수 없지만
// 이 입력값을 소수로 간주한다.
//String result = "소수다";
boolean flag = true; //-- num(사용자 입력값)은 소수일 것이다~!!!
while (n < num)
{
// 테스트
//System.out.println("반복문 수행 → n : " + n);
// 확인 연산
//-- n 으로 num 을 나누어 떨어지는지 확인 → 나머지가 0 인지 확인
if (num % n == 0) // 즉, 나누어 떨어지는 상황
{
// 앗~! 난 너를 소수라 생각했는데... ㅠㅠ
// 넌... 소수가 아니었어 흑흑흑... ㅠㅠ
flag = false;
break; // 멈춘다. ( + 그리고 빠져나간다.)
// → break 를 감싸는 가장 가까운 반복문
}
n++;
}
// 테스트
//System.out.println("flag : " + flag);
// 결과 출력
// (최종 결과를 출력하기 전에 추가 확인 → 1인지 아닌지에 대한 추가 검토)
if (flag && num != 1) //flag 자체가 true 이므로 flag == true → flag
{
// 최종적으로 넌 소수
System.out.printf("%d → 소수\n", num);
}
else
{
// 최종적으로 넌 소수 아님
System.out.printf("%d → 소수 아님\n", num);
}
}
}
// 실행 결과
/*
임의의 정수 입력 : 990
990 → 소수 아님
계속하려면 아무 키나 누르십시오 . . .
*/
/*
임의의 정수 입력 : 991
991 → 소수
계속하려면 아무 키나 누르십시오 . . .
*/
/*
임의의 정수 입력 : 1
1 → 소수 아님
계속하려면 아무 키나 누르십시오 . . .
*/
/*[내가 한 풀이]=======================================================
public class Test050
{
public static void main(String[] args) throws IOException
{
// 1. 변수 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int nInputNum; //-- 입력받은 수
int nMinusInputNum; //-- 입력받은 수보다 1 작은 수
int nRemainNum; //-- 나머지값 저장
int i = 2; //-- 루프 변수
String strResult=""; //-- 결과 문자열
// 2. 사용자로부터 입력 받고, nMinusInputNum에 -1 값 저장.
System.out.print("임의의 정수 입력 : ");
nInputNum = Integer.parseInt(br.readLine());
nMinusInputNum = nInputNum - 1;
// 3. 연산 수행
// while (int i = 2 ~ 입력 받은 수)
// {
// 나머지 값 = 입력받은 수 % 입력받은 수보다 1 작은 수;
//
// if (나머지 값 == 0)
// {
// 나누어 떨어지는 수 있음! → 소수 아님
// }
// else if (나머지 값 != 0)
// {
// [ 1이 아니니? ] 한번 더 물어보고
// ▶ true : 소수
// ▶ false : 소수 아님 (1이다!)
// }
//
// }
while (i < nInputNum) // 루프변수 i = 2 ~ 입력받은 수;
{
nRemainNum = nInputNum % i;
System.out.println(" i : " + i);
if (nRemainNum == 0) // 나누어 떨어진다.
{
System.out.printf("『if문 들어왔습니다.』 ▶ i값 : %d로 나누어 떨어집니다.\n", i);
System.out.println("● 나머지 값 : " + nRemainNum);
System.out.println("소수 아님");
return;
}
else if (nRemainNum != 0) // 나누어 떨어지지 않는다.
{
System.out.printf("『else if문 들어왔습니다.』 ▶ i값 : %d로 나누어 떨어지지 않습니다.\n", i);
System.out.println("● 나머지 값 : " + nRemainNum);
strResult = "소수";
// ★☆★☆★☆ 입력받은 값이 1인지 아닌지 확인하는 과정을 더 거쳐야 함... ★☆★☆★☆
if (입력받은 값 nInputNum == 1이 아닌가?)
{
소수다.
}
else
{
소수 아니다. (입력 값이 1이다)
}
}
i++;
}
System.out.printf("%d → %s\n", nInputNum, strResult);
// 4. 결과 출력
// 임의의 정수 입력 : 11
// 11 → 소수
// 계속하려면 아무 키나 누르세요...