Programing_Java
Project#1 _ Team Project No.1 본문
#1 Project 문제
정수를 2개 입력하고, 정수1~정수2 사이의 랜덤수를 3개 출력. 단, 랜덤 숫자끼리는 중복되어서는 안된다.
#2 문제 해석 → 한글 코딩
/*
정수1, 정수2를 입력받으려고 스캐너 변수 선언
난수를 생성하기 위해 랜덤 변수 선언
범위를 구하기 위한 변수 정수1, 정수2 선언
아래 명령 계속 반복{
사용자 입력 메시지 출력
정수1 입력
사용자 입력 메시지 출력
정수2 입력
{만약 정수1과 정수2 차의 절댓값이 2미만인 경우
오류메시지 "정수를 다시 입력해주세요" 출력 후
다시 사용자 입력 받음}
{만약 정수1과 정수2 차의 절댓값이 2이상 이라면
반복하지 않음}
}
//교환 알고리즘
{만약 정수1이 정수2보다 크면 정수1과 정수2의 값을 교환
임시변수에 정수1 대입
정수1에 정수2 대입
임시변수에 저장한 정수를 정수2에 대입}
상수화 랜덤갯수 = 정수2 - 정수1 + 1
난수1 선언 및 초기화 = (상수화 시킨 랜덤갯수) + 더 작은수(시작값)
난수2 선언
난수3 선언
아래 명령 계속 실행{
난수2 = (상수화 시킨 랜덤갯수) + 더 작은수(시작값)
{만약 난수1과 난수2가 다르면
종료}
아래 명령 계속 실행
난수3 = (상수화 시킨 랜덤갯수) + 더 작은수(시작값)
{만약 난수1과 난수3이 다르고 난수2와 난수3이 다르면
종료}
난수1, 난수2, 난수3 출력
*/
#3 코드 작성
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random r = new Random();
// 정수1값, 정수2값선언
int num1;
int num2;
// 알맞는 정수를 입력할때 까지 반복 하는 while문
while (true) {
System.out.print("1번 정수 입력 >>> ");
// 1번 정수 입력 받고 num1에 저장
num1 = sc.nextInt();
System.out.print("2번 정수 입력 >>> ");
// 2번 정수 입력 받고 num2에 저장
num2 = sc.nextInt();
// 만약 정수1-정수2를 한 값이 -2보다 크고, 2보다 작다면
if (-2 < num1 - num2 && num1 - num2 < 2) {
System.out.println("범위가 2 미만입니다. 다시 입력해주세요.");
// 다시 처음부터 입력 받기 위해 while문의 맨 처음으로 이동
continue;
} else
break;
}
// 만약 정수1이 정수2보다 크다면
if (num1 > num2) {
// 임시 저장변수에 num1값 저장
int temp = num1;
num1 = num2;
num2 = temp;
}
// 랜덤수1은 정수2-정수1을 하고 다시 1을 더하여 범위를 설정하고, 시작점을 num1으로 지정
int r1 = r.nextInt((num2 - num1) + 1) + num1;
int r2;
int r3;
// 랜덤수2가 뽑힐 떄 까지 도는 while문
while (true) {
// 랜덤수1과 동일
r2 = r.nextInt((num2 - num1) + 1) + num1;
// 만약 r1과 r2가 같지 않다면
if (r1 != r2) {
break;
}
}
// 랜덤수3이 뽑힐 떄 까지 도는 while문
while (true) {
// 랜덤수3과 동일
r3 = r.nextInt((num2 - num1) + 1) + num1;
// 만약 r1과 r3가 다르고, r2와 r3가 다르다면
if (r1 != r3 && r2 != r3) {
break;
}
}
System.out.println(r1 + ", " + r2 + ", " + r3);
// 정수값을 입력받기 위해 import한 스캐너 사용 종료
sc.close();
}
#4 출력값
1번 정수 입력 >>> Ex) 1
2번 정수 입력 >>> Ex) 2
범위가 2 미만입니다. 다시 입력해주세요.
1번 정수 입력 >>> Ex) 0
2번 정수 입력 >>> Ex) 9
6, 2, 9
#5 Feedback
1. 상수화
: 기존 사용 코드
((num2-num1)+1)로 랜덤 함수의 갯수를 정하고, 해당 내용을 반복
→ 긴 문장을 다시 반복해서 작성하지 않도록, 상수화를 통해서 코드를 더욱 간소화
final int ranrange = num2 - num1 + 1 ;
2. While문을 사용할때는 항상 종료조건을 우선해서 사용
: 기존 사용 코드
while (true) {
System.out.print("1번 정수 입력 >>> ");
num1 = sc.nextInt();
System.out.print("2번 정수 입력 >>> ");
num2 = sc.nextInt();
if (-2 < num1 - num2 && num1 - num2 < 2) {
System.out.println("범위가 2 미만입니다. 다시 입력해주세요.");
continue;
} //if로 끝내지말고 해당 주석과 같은 줄에 조건 Ex) else를 걸어주어 종료조건을 만들기
break;
}
'Projects' 카테고리의 다른 글
Project#6 _ OTT 프로그램 No.4 - Admin, Client 파트 코딩 (0) | 2025.02.01 |
---|---|
Project#5 _ OTT 프로그램 No.3 - Main View 파트 코딩 (0) | 2025.01.31 |
Project#4 _ OTT 프로그램 No.2 - 한글코딩 및 흐름파악 (0) | 2025.01.30 |
Project#3 _ OTT 프로그램 No.1 - 설계 단계 (0) | 2025.01.23 |
Project#2 _ Shopping Mall Project (0) | 2025.01.03 |