JAVA

While문을 이용한 랜덤뽑기

record2080 2024. 12. 31. 17:28

문제- a와 b사이의 랜덤수(난수)3개를 출력하세요

단, 랜덤수 3개는 중복되지 않아야 합니다.

 

<Java를 이용한 코드 짜기>

import java.util.Scanner;

public class Main {

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;
            }
            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);

        sc.close();
    }
}
 이 코드도 좋지만, 더 나은 코드로 바꿔보자!!!
import java.util.Random;
import java.util.Scanner;

public class Main {
    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();
			
			if(-2>= num1-num2 || num1-num2>=2) {
				break;
			}
			System.out.println("범위가 2 미만입니다. 다시 입력해주세요.");
	     	}
        }

        // 만약 정수1이 정수2보다 크다면
        if (num1 > num2) {
            // 임시 저장변수에 num1값 저장
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }
		final int randomR=(num2 - num1) + 1;
        
        // 랜덤수1은 정수2-정수1을 하고 다시 1을 더하여 범위를 설정하고, 시작점을 num1으로 지정
        int rand1 = r.nextInt(randomR + 1) + num1;
        int rand2;
        int rand3;

        // 랜덤수2가 뽑힐 떄 까지 도는 while문
        while (true) {
            // 랜덤수1과 동일
            rand2 = r.nextInt(randomR) + 1) + num1;
            // 만약 r1과 r2가 같지 않다면
            if (rand1 != rand2) {
                break;
            }
        }
        // 랜덤수3이 뽑힐 떄 까지 도는 while문
        while (true) {
            // 랜덤수3과 동일
            rand3 = r.nextInt(randomR + 1) + num1;
            // 만약 r1과 r3가 다르고, r2와 r3가 다르다면
            if (rand1 != rand3 && rand2 != rand3) {
                break;
            }
        }
        System.out.println(rand1 + ", " + rand2 + ", " + rand3);

        sc.close();
    }
}


 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

배열문제 ①  (0) 2025.01.02
IF~Else <홀수와 짝수 구하기>  (0) 2025.01.02
369게임  (0) 2025.01.01
WHILE문- 무한루프의 늪에서 벗어나고 싶다  (1) 2024.12.30
자바의 조건문 (If~else 구문)  (1) 2024.12.26