У меня есть массив, содержащий значения 1, 2 и 3 int, и я хочу случайным образом присвоить все эти значения трем различным переменным (без повторения каких-либо значений). Это то, что я получил до сих пор, но когда я его тестировал, он иногда дублировал одно из значений.

Вопрос: как я могу случайным образом распределить все элементы массива по нескольким различным переменным?

//method     
    public static double calculate(int randomVal[]){
            Random random = new Random();
            double randomAnswer = 0;
            for(int i = 0;i < randomVal.length; i++){
              randomAnswer = (randomVal[random.nextInt(randomVal.length)]);
            }
            return randomAnswer;   



//create array
 int[] randomVal = new int[] {1,2,3};

double solution1 = MathGame.calculate(randomVal);
double solution2 = MathGame.calculate(randomVal);
double solution3 = MathGame.calculate(randomVal);
0
user4276463 20 Фев 2015 в 08:06

3 ответа

Лучший ответ

Если вы можете использовать Integer[], вы можете использовать Collections.shuffle(List<?>) и Arrays.asList(T...), а затем Arrays.toString(Object[]), чтобы отображать его как

Integer[] randomVal = new Integer[] { 1, 2, 3 };
Collections.shuffle(Arrays.asList(randomVal));
System.out.println(Arrays.toString(randomVal));
1
Elliott Frisch 20 Фев 2015 в 05:14

Если вы хотите просто позволить Java обрабатывать это и использовать набор, как описано здесь

Set<T> mySet = new HashSet<T>(Arrays.asList(someArray));

Iterator<T> it=mySet.iterator();

//assign variables using it.next();
0
Community 23 Май 2017 в 12:30

Вот как можно перетасовать массив целых чисел

void shuffle(int[] a) {
    Random rnd = new Random();
    for (int i = a.length; i > 1; i--) {
        int r = rnd.nextInt(i);
        int t = a[i - 1];
        a[i - 1] = a[r];
        a[r] = t;
    }
}

Тогда просто используйте его элементы

    int[] a = { 1, 2, 3 };
    shuffle(a);
    double solution1 = a[0];
    double solution2 = a[1];
    double solution3 = a[2];
0
Evgeniy Dorofeev 20 Фев 2015 в 05:28