Случайное значение экземпляра, разделяемое между классами - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть метод, который возвращает случайное значение.

  public int newRandom() {
      Random random = new Random();
      int o = random.nextInt(9 - 0 + 1) + 0;
      return o;
}

После того, как я сгенерировал это значение, я в настоящее время устанавливаю переменную внутри другого метода для результата этой функции, что я хочу сделать, этопусть другой класс знает тот же результат, что и переменная, я имею в виду, что оба имеют одно и то же случайное число, я почему-то не могу понять это самостоятельно.Каков наилучший способ достижения этого?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Создайте базовый класс с общедоступной статической переменной, и когда вы наследуете эти новые классы из базового класса и создаете новые экземпляры, они разделяют эту же переменную:

import java.util.Random;

class Base_class {
  public static int o;

  public Base_class() {
  }

  public int newRandom() {
        Random random = new Random();
        o = random.nextInt(9 - 0 + 1) + 0;
        return o;
  }

  public int get_randn() {
    return o;
  }
}

class Derived_class1 extends Base_class {
  public Derived_class1() {
  }
}

class Derived_class2 extends Base_class {
  public Derived_class2() {
  }
}

class Main{
    public static void main(String [] args){
    Derived_class1 obj1 = new Derived_class1();
    Derived_class2 obj2 = new Derived_class2();
    obj1.newRandom();
    System.out.println(obj1.get_randn());
    System.out.println(obj2.get_randn());
  }
}
0 голосов
/ 06 декабря 2018

Рассмотрите возможность использования композиции, в которой несколько объектов (могут быть разными классами) совместно используют один и тот же экземпляр класса, который предоставляет случайные значения.Например, учитывая этот класс, чтобы отслеживать случайные значения:

    private class RandomProvider {
        private final Random random = new Random();
        private int currentValue;

        private int newRandom() {
            currentValue = random.nextInt(10);
            return currentValue;
        }

        private int getCurrentValue() {
            return currentValue;
        }
    }

и другой класс (или классы), которые используют RandomProvider:

    private class A {
        private final RandomProvider randomProvider;

        private A(RandomProvider randomProvider) {
            this.randomProvider = randomProvider;
        }

        private int getCurrentRandomValue() {
            return randomProvider.getCurrentValue();
        }
    }

Итак, пара экземпляровA (или некоторого другого класса) может использовать тот же экземпляр RandomProvider:

    RandomProvider randomProvider = new RandomProvider();
    System.out.println("new random value is " + randomProvider.newRandom());

    A a1 = new A(randomProvider);
    System.out.println("A1 sees current random value as " + a1.getCurrentRandomValue());

    A a2 = new A(randomProvider);
    System.out.println("A2 sees current random value as " + a2.getCurrentRandomValue());

    randomProvider.newRandom();
    System.out.println("A1 sees current random value as " + a1.getCurrentRandomValue());
    System.out.println("A2 sees current random value as " + a2.getCurrentRandomValue());

Пример вывода:

new random value is 9
A1 sees current random value as 9
A2 sees current random value as 9
A1 sees current random value as 3
A2 sees current random value as 3
0 голосов
/ 05 декабря 2018

Вы имеете в виду что-то подобное?

import java.util.Random;

public class A
{

    public static Random random = new Random();

}


public class B
{

    public int getRandomInt()
    {
        return A.random.nextInt();
    }

}
...