LINUX.ORG.RU

[java] Повторения random

 


0

0

Надо, что бы возвращаемое число никогда не совпадало с предыдущим, то есть что бы никогда не выподало два одинаковых числа подряд:

int old = -1;

    int rand(int max){
        Random random = new Random();
        int rnd;
        do{
            rnd = random.nextInt(max);
            if (rnd == old) {
                old = rnd;
                continue;
            }
        } while (rnd == old);
        return rnd;
    }
ЧЯДНТ?


Юзай сторонние алгоритмы, Люк.

Zhbert ★★★★★
()

>old = rnd;

continue;

Нужно old = rnd; break;

anonymous
()

Запоминать надо «новое» число, а не то старое, которое уже известно :) Поэтому лучше сделать проверку на неравенство, если она проходит - запомнить в old новое значение и его же вернуть.

oami ★★
()

Строка old = rnd; бессмысленна т.к. rnd == old. А вот перед return следовало бы её добавить.

Sadler ★★★
()

[code] if (rnd != old) { old = rnd; break; } [/code]

anonymous
()
import java.util.Random;

public class Main {
    private static int old = -1;
    private static int r = -1;
    private static Random rnd = new Random();

    static int rnd (int max) {
        while (old == (r = rnd.nextInt(max))) System.out.println ("дубль");

        old = r;
        return r;
    }



    public static void main (String [] args) {
        for (int i = 0; i < 10; i++) System.out.println (rnd (10));
    }
}

не?

Rastafarra ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.