[Java] Как включить максимальное и минимальное значение в случайном порядке, исключая число в середине - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать целочисленный метод, который будет отслеживать положение, в котором кто-то будет, при использовании случайного int, равного -1 или 1, где он будет отображать мою позицию несколько раз. Пример (pos = 0, pos = 1, pos = 2, pos = 1, et c.). Пока у меня есть min и max от -1 до 1, но я не хочу включать ноль и не уверен, как от него избавиться. Дополнительно можно ли сложить все предпринятые шаги? Пример: если бы пример, приведенный выше, был добавлен, это было бы 3 шага (каждый шаг назад и вперед считается как один шаг). Я хотел бы включить общее количество сделанных шагов, но я не уверен, как это сделать.

import java.util.*;
public class randWalking{
    public static int walkingStepsRand(int a){
    Random rand = new Random();
    int pos = 0;
     for(int i = 1; i <= x; i++){
        pos = pos + rand.nextInt((1 + 1) + 1) - 1;
     System.out.println("Pos: " + pos);
  }

  return pos;
  }



     public static void main(String[] args){
        randomWalk(5);
        }

}

1 Ответ

0 голосов
/ 09 мая 2020

Есть несколько способов ответить на этот вопрос:

  1. Как сгенерировать случайный элемент из набора {-1, 1}
  2. Как сгенерировать случайный элемент из любого заданного набора
  3. Как сгенерировать случайное число в двух разных, непересекающихся диапазонах.

Я постараюсь ответить на все три.

  1. Как сгенерировать случайный элемент из набора {-1, 1}:

    Если вы можете сгенерировать число из набора {0,1}, это просто преобразовать в выбор из {-1,1} - умножьте это число на 2 и добавьте (-1). например, `random.nextInt (2) * 2 - 1

  2. Как сгенерировать случайный элемент из любого заданного набора

    Определите массив элементов и выберите случайный индекс между 0..length, например

    int[] choices = {1,5,6,8,9};
    int randomChoice = choices[random.nextInt(choices.length)];
    
  3. Как сгенерировать случайное число в двух разных, непересекающихся диапазонах.

    Есть несколько способов решить эту проблему. Один из простых подходов - решить, какой непрерывный диапазон использовать случайное число, а затем сгенерировать числа в непрерывном диапазоне:

    // generate a random number in the integer interval [0, 25) union [75, 100)
    int value = (r.nextInt(2) == 0? r.nextInt(25) : 75 + r.nextInt(25));
    

    Если интервалы имеют одинаковую ширину и находятся на таком же расстоянии друг от друга, как в В приведенном выше примере вы также можете использовать:

    int spacingBetweenIntervals = 75;
    int numIntervals = 2;
    int intervalWidth = 25;
    int value = (r.nextInt(numIntervals) * spacingBetweenIntervals) + r.nextInt(intervalWidth);
    

    Или вы можете манипулировать полученным значением в непрерывном диапазоне, аналогично тому, что я предлагал в варианте 1.

    int value = r.nextInt(50);
    
    // anything that's 25 and above should be shifted to another interval
    value = value >= 25? value + 75 : value;
    

Надеюсь, это ответит на ваш вопрос.

...