How to generate 3 no-digit repeated random integers, each with distinct digits in Java

1 Answer

0 votes
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class DistinctDigitGenerator {

    // ------------------------------------------------------------
    // Function: generate_number
    // Purpose: Create one 3-digit integer with distinct digits,
    //          drawn from a shared pool of available digits.
    //          The first digit is never zero, so the result
    //          is always a true 3-digit integer.
    // ------------------------------------------------------------
    public static int generate_number(List<Character> availableDigits, int length, Random rng) {

        // Choose the first digit from the pool, excluding '0'
        List<Character> nonZeroDigits = new ArrayList<>();
        for (char d : availableDigits) {
            if (d != '0') {
                nonZeroDigits.add(d);
            }
        }

        char firstDigit = nonZeroDigits.get(rng.nextInt(nonZeroDigits.size()));
        availableDigits.remove((Character) firstDigit);

        // Choose the remaining digits from the updated pool
        List<Character> remaining = new ArrayList<>();
        for (int i = 0; i < length - 1; i++) {
            char d = availableDigits.get(rng.nextInt(availableDigits.size()));
            remaining.add(d);
            availableDigits.remove((Character) d);
        }

        // Build the number as a string, then convert to int
        StringBuilder sb = new StringBuilder();
        sb.append(firstDigit);
        for (char d : remaining) {
            sb.append(d);
        }

        return Integer.parseInt(sb.toString());
    }


    // ------------------------------------------------------------
    // Function: generate_three_distinct_digit_numbers
    // Purpose: Produce three integers, each with distinct digits,
    //          and no digit repeated across all three numbers.
    //          All numbers are guaranteed to be 3 digits long.
    // ------------------------------------------------------------
    public static int[] generate_three_distinct_digit_numbers(Random rng) {

        // Start with all digits 0–9 as strings
        List<Character> digits = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            digits.add((char) ('0' + i));
        }

        // Generate three numbers, each 3 digits long
        int n1 = generate_number(digits, 3, rng);
        int n2 = generate_number(digits, 3, rng);
        int n3 = generate_number(digits, 3, rng);

        return new int[]{n1, n2, n3};
    }


    // ------------------------------------------------------------
    // Main execution
    // ------------------------------------------------------------
    public static void main(String[] args) {
        Random rng = new Random();

        // Run the generator 5 times
        for (int i = 0; i < 5; i++) {
            int[] result = generate_three_distinct_digit_numbers(rng);
            System.out.println("(" + result[0] + ", " + result[1] + ", " + result[2] + ")");
        }
    }
}


/*
run:

(194, 837, 250)
(257, 108, 964)
(406, 978, 251)
(296, 478, 130)
(137, 684, 920)

*/

 



answered Jul 17 by avibootz

Related questions

...