Как сравнить результаты разных циклов друг с другом? - PullRequest
0 голосов
/ 23 марта 2020

Моя проблема в том, что с кодом, который у меня есть, он продолжает генерировать новые результаты / кости, но, скажем, результат2 в раунде 2 совпадает с результатом 1 в раунде3, тогда он также должен прекратить генерацию новых результатов. Это не делает это сейчас. Как я могу настроить, что он делает это?

int trials = 0;

for (int totalGames = 1; totalGames <= 3; totalGames++ ) {

    int result1, result2;

    // simulating dice rolls
    do {
        result1 = (int) (Math.random() * 6) + 1;
        result2 = (int) (Math.random() * 6) + 1;
        trials++;
        System.out.println(result1);
        System.out.println(result2);

    }
    while (result1 != result2);

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Таким образом, вы проверяете, совпадает ли какое-либо из предыдущих значений result1 с текущим значением result2 и совпадает ли какое-либо из предыдущих значений result2 с текущим значением result1 на каждой итерации, пока условие не станет истинным, и вы выйдете из функции l oop.

int trials = 0;
for (int totalGames = 1; totalGames <= 3; totalGames++) {
    Set<Integer> result1Set = new HashSet<>();
    Set<Integer> result2Set = new HashSet<>();
    while (true) {
        trials++;
        int result1 = (int) (Math.random() * 6) + 1;
        int result2 = (int) (Math.random() * 6) + 1;
        if (result1Set.contains(result2) || result2Set.contains(result1)) {
            break;
        }
        result1Set.add(result1);
        result2Set.add(result2);
        System.out.println(result1);
        System.out.println(result2);
    }
}
0 голосов
/ 23 марта 2020

Вам нужно будет отслеживать каждый результат в какой-либо коллекции, а затем проверять, содержится ли результат в этой коллекции:

/**
 * @return The amount of trials it took to get two matching numbers.
 */
public static int roleDice() {
    int trials = 0;
    HashSet<Integer> seenResults = new HashSet<Integer>();

    for (int totalGames = 1; totalGames <= 3; totalGames++) {
        int result1, result2;

        do {
            result1 = (int) (Math.random() * 6) + 1;
            result2 = (int) (Math.random() * 6) + 1;
            System.out.println(result1);
            System.out.println(result2);

            // Set.add(...) returns false if the value is already contained
            if (!(seenResults.add(result1) && seenResults.add(result2)))
                return trials;

            trials++;
        } while (result1 != result2);
    }

    return trials;
}

public static void main(String[] args) {
    int trials = roleDice();
}
...