Ява выбрать случайный класс / объект - PullRequest
0 голосов
/ 02 марта 2012

Есть ли способ выбрать случайный объект из массива объектов?

Я пробовал несколько способов, которые мог придумать, но ни один из них не работал.
Я хочу использовать функцию в случайном классе (все классы будут иметь одинаковую функцию, но разные результаты).

Я должен был упомянуть, что я пытаюсь вернуть изображение, и каждый раз, когда я пытаюсь вернуть случайное изображение, оно не возвращает anyting ("null")

Вот мой код, с которым у меня проблема:

    Car car;
    Ford ford;
    Mazda mazda
    Fiat fiat
    Rover rover   

    Car carlist[] = {ford,fiat,mazda,rover}

public void paint(){
//this displays an image every 128 pixles 
        for (int i = 0;i<Width;i+=128){

            for(int j=128; j<Height;j+=128){
// this draws the image (the image is declaired in each car's class as getImage)
                g.drawImage((car.carList[rand.nextInt(5)]).getImage(), i, j , this);
                    }
                }

Код работает, если я помещаю объект (вместо carcarList [rand.nextInt (5)])). Автомобили каждого из типов расширяются.

Ответы [ 7 ]

2 голосов
/ 02 марта 2012

Предполагая, что yourList - это массив ваших объектов, используйте эту единственную строку:

Object randomObj = yourList[(int)Math.random() * list.length];
1 голос
/ 02 марта 2012

Вы можете использовать метод java.util.Random nextInt() для генерации случайного индекса в массиве. Метод принимает аргумент, определяющий возвращаемое значение maximum - 1: укажите length массива:

// Member variables.
Object[] arr = ...;
Random r = new Random();

Object nextRandmonObject()
{
    return arr[r.nextInt(arr.length)];
}
1 голос
/ 02 марта 2012

Вы можете решить это следующим образом, используя Random класс .

String rndStr = yourArray[new Random().nextInt(yourArray.length)];

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

0 голосов
/ 02 марта 2012

У всех ваших объектов есть функция, которая возвращает что-то, поэтому позвольте им реализовать этот интерфейс:

public interface ObjectReturningSomething
{
    Object theFunction();
}

Тогда ваши объекты будут иметь такие классы с функциями, возвращающими различные виды объектов:

public class ObjectReturningString implements ObjectReturningSomething
{
    String theFunction() { return "Foo"; }
}
public class ObjectReturningInteger implements ObjectReturningSomething
{
    Integer theFunction() { return 42; }
}

Вот массив таких объектов:

ObjectReturningSomething[] objectArray = new ObjectReturningSomething[] { new ObjectReturningString(), new ObjectReturningInteger() };

Вот как выбрать случайный:

int randomIndex = new Random().nextInt(array.length);
ObjectReturningSomething randomObject = objectArray.get(randomIndex);

А вот как вызвать эту функцию.

System.out.println(randomObject.theFunction());
0 голосов
/ 02 марта 2012

как это

    String[] a = new String[]{"1","2","3","4"};
    Random rand = new Random();
    String arbit = a[rand.nextInt(a.length)];
0 голосов
/ 02 марта 2012

Довольно просто:

Object your_array[];
[...]
Random rnd = new Random();
Object random_element = your_array[rnd.nextInt(your_array.length)];
0 голосов
/ 02 марта 2012

Вы можете разрешить им всем реализовывать один и тот же интерфейс, а затем просто случайным образом выбрать класс.Несколько очень непроверенный псевдокод для этого:

public class  myclass1 implements RandomInterface {}


public class  myclass2 implements RandomInterface {}

public interface RandomInterface {
    public void doStuff1();
    pubilc String doStuff2();
}

    public class random{
        RandomInterface randomObj = yourList[(int)Math.random() * list.length];
        randomObj.doStuff1();
        randomObj.doStuff2();

    }
...