Java Общее исключение - PullRequest
       5

Java Общее исключение

0 голосов
/ 06 марта 2020

У меня есть два класса, RandomObtainableList<E> и Driver. RandomObtainableList расширяет ArrayList и реализует RandomObtainable (который содержит только 2 абстрактных метода) и реализует методы.

Однако когда я запускаю класс Driver, он говорит, что во второй строке основного метода в Diver есть исключение NullPointerException класс (целое число i = ...). Я не могу понять, почему он вызывает это исключение, так как оба класса выглядят хорошо для меня.

public class RandomObtainableList<E> extends ArrayList<E> implements RandomObtainable<E> {

    private Random random;

    public RandomObtainableList() {
        super();
        random = new Random(); 
    }

    @Override
    public E getRandom() throws NoSuchElementException {
        //returns an element randomly selected from the collection
        E e = this.get(random.nextInt(this.size()));
        return e; 
    }

    @Override
    public boolean removeRandom() throws UnsupportedOperationException {
        //try to remove a random element from the collection
        boolean b = false;
        int size = this.size();

        if (size != 0){
            E e = this.remove(random.nextInt(this.size()));
            b = true;
        }

        return b; 
    }
}

И Driver класс

public class Driver {
    public static RandomObtainableList<Integer> list;

    public void Driver(){
        list = new RandomObtainableList<>();
        list.add(1);
        list.add(2);
    }

    public static void main(String[] args){
        Driver d = new Driver();
        Integer i = list.getRandom();
        boolean b = list.removeRandom();

        System.out.println("Element retrieved: " +i);
        System.out.println("Element removed: " +b);
    } 
}

1 Ответ

0 голосов
/ 06 марта 2020

Ваш драйвер должен инициализировать ваш список в нем конструктором по умолчанию, который не определен, поэтому он является пустым конструктором по умолчанию:

public Driver() {
   // empty constructor
}

, чтобы получить ожидаемый результат, который ваш класс драйверов будет:

public class Driver {
    private static RandomObtainableList<Integer> list;

    public Driver() {
        list = new RandomObtainableList<>();
        list.add(1);
        list.add(2);
    }

    public RandomObtainableList getList() {
        return this.list;
    } 
}

Важно инкапсулировать доступ к свойствам класса с помощью методов получения / установки. Свойства останутся закрытыми и доступны только напрямую из определяющего их класса.

Также ваша точка входа main должна быть объявлена ​​в отдельном классе. Главный например

public class Main {

    public static void main(String[] args){
        Driver d = new Driver();
        Integer i = list.getRandom();
        boolean b = list.removeRandom();

        System.out.println("Element retrieved: " +i);
        System.out.println("Element removed: " +b);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...