Как создать случайный индекс в мой ArrayList? - PullRequest
0 голосов
/ 12 ноября 2018

Итак, у меня есть Кубок класса, который является частью игры для класса. Открытый метод int select () должен возвращать ход в c. Мне нужно сгенерировать случайный индекс в c, и мне сказали сделать это путем генерации случайного числа от нуля до и без учета размера ArrayList. Вот что у меня есть:

import java.util.ArrayList;
import java.util.Random;
public class Cup {

    ArrayList<Integer> c = new ArrayList<Integer>();
    private Random r;

    public Cup() {
        c.add(1);
        c.add(2);
        c.add(3);
        Random r = new Random();
    }

    public int count() {
        return c.size();
    }

    public int select() {
        int index = r.nextInt(c.size());
        return c.get(index);
    }

    public void remove(int m) {
        c.remove(m);
    }
}

Когда я компилирую это в игре, которую я использую, она компилируется правильно, но говорит мне, что есть исключение Null Pointer в строке, где находится r.nextInt (c.size ()). Просто очень запутанно, потому что я чувствую, что это должно быть правильно. Спасибо !!!

1 Ответ

0 голосов
/ 12 ноября 2018

В вашем конструкторе вам не нужно Random r, поскольку у вас уже есть private Random r;

Остальное, похоже, работает.Позаботьтесь о вашем методе remove(int m), чтобы пользователь не передавал значение, превышающее размер ArrayList, чтобы избежать исключения IndexOutOfBoundsException.

import java.util.ArrayList;
import java.util.Random;

public class Cup {

    ArrayList<Integer> c = new ArrayList<Integer>();
    private Random r;

    public Cup() {
        c.add(1);
        c.add(2);
        c.add(3);

        //here you should use your r attribute
        r = new Random();
    }

    public int count() {
        return c.size();
    }

    public int select() {
        int index = r.nextInt(c.size());
        return c.get(index);
    }

    public void remove(int m) {
        c.remove(m);
    }
}
...