0Pricing
Java Academy · 강의

난수 범위와 섞기

범위가 제한된 난수와 컬렉션 섞기를 다룹니다

난수 범위와 섞기은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

범위와 섞기

실제 프로그램에서는 0부터 bound-1까지의 값만 필요한 경우가 드뭅니다. 이 레슨에서는 임의의 범위, 컬렉션을 무작위로 섞는 방법, 무작위 요소를 선택하는 방법을 다룹니다.

사용자 지정 범위 공식

min부터 max까지 양 끝값을 포함하는 int를 생성하려면 min + rng.nextInt(max - min + 1)을 사용하십시오.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        int min = 10, max = 20;
        int value = min + rng.nextInt(max - min + 1);
        System.out.println("10 to 20: " + value);
    }
}

시작점과 상한을 지정하는 nextInt

최신 Java에서는 nextInt(origin, bound)를 직접 호출할 수 있습니다. origin은 포함되고 bound는 포함되지 않습니다. 따라서 수동으로 공식을 작성할 필요가 없습니다.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        int value = rng.nextInt(10, 21);
        System.out.println("10 to 20: " + value);
    }
}

범위 내 실수 난수

lo부터 hi까지의 실수를 얻으려면 lo + rng.nextDouble() * (hi - lo)를 사용하십시오.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        double lo = 5.0, hi = 7.5;
        double value = lo + rng.nextDouble() * (hi - lo);
        System.out.println(value);
    }
}

List 섞기

Collections.shuffle(list)는 List의 순서를 제자리에서 무작위로 바꿉니다. 카드 덱이나 무작위 퀴즈에 유용합니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> deck = new ArrayList<>(List.of(1, 2, 3, 4, 5));
        Collections.shuffle(deck);
        System.out.println(deck);
    }
}

재현 가능한 섞기

시드가 설정된 Random을 두 번째 인수로 전달하면 결정적인 섞기를 수행할 수 있습니다. 예를 들어 Collections.shuffle(list, new Random(seed))과 같이 사용합니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        List<Integer> deck = new ArrayList<>(List.of(1, 2, 3, 4, 5));
        Collections.shuffle(deck, new Random(99));
        System.out.println(deck);
    }
}

섞기에는 변경 가능한 List가 필요함

List.of(...)는 변경할 수 없는 목록을 만듭니다. 이 목록을 섞으면 UnsupportedOperationException이 발생합니다. 먼저 new ArrayList<>(...)로 감싸십시오.

무작위 요소 선택

무작위 인덱스를 생성한 다음 get을 사용하여 무작위 요소를 선택하십시오.

import java.util.List;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        List<String> colors = List.of("red", "green", "blue");
        Random rng = new Random();
        String pick = colors.get(rng.nextInt(colors.size()));
        System.out.println("Chosen: " + pick);
    }
}

배열 섞기

배열에는 기본 제공 섞기 기능이 없습니다. 일반적인 방법은 Fisher-Yates 알고리즘입니다. 각 요소를 무작위로 선택한, 현재 위치보다 작거나 같은 인덱스의 요소와 교환합니다.

import java.util.Arrays;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Random rng = new Random(3);
        for (int i = arr.length - 1; i > 0; i--) {
            int j = rng.nextInt(i + 1);
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
        System.out.println(Arrays.toString(arr));
    }
}

무작위 표본 추출

서로 다른 여러 항목을 선택하려면 복사본을 섞은 다음 앞에서 몇 개를 가져오거나, Set으로 이미 선택한 인덱스를 추적하십시오. 작은 목록에서는 섞은 후 일부를 가져오는 방법이 가장 간단합니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> pool = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8));
        Collections.shuffle(pool);
        List<Integer> sample = pool.subList(0, 3);
        System.out.println("Sample: " + sample);
    }
}

실용적인 참고 사항

전체 순서를 무작위로 바꿔야 할 때는 섞기를 사용하고, 범위가 제한된 값이 필요할 때는 사용자 지정 범위 공식을 사용하십시오. 상한을 포함해야 할 때 1만큼 어긋나는 오류가 생기지 않도록 항상 주의하십시오.

빠른 확인

범위와 섞기에 대한 이해도를 확인해 보십시오.

복습

범위와 섞기를 배웠습니다.

  • 범위에는 min + nextInt(max - min + 1) 또는 nextInt(origin, bound)를 사용하십시오.
  • Collections.shuffle은 변경 가능한 목록의 순서를 제자리에서 바꿉니다.
  • 재현성을 위해 섞기에 시드를 설정하십시오.
  • 무작위 인덱스를 통해 무작위 요소를 선택하십시오.

자주 묻는 질문

“난수 범위와 섞기” 강의는 무료인가요?

네 — “난수 범위와 섞기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“난수 범위와 섞기”에서 뭘 배우나요?

범위가 제한된 난수와 컬렉션 섞기를 다룹니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“난수 범위와 섞기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Math 클래스
  2. 난수 생성
  3. 난수 범위와 섞기
  4. 수학적 반올림과 한계
← Java Academy(으)로 돌아가기