установить проблему интерфейса и объекты - PullRequest
0 голосов
/ 20 марта 2011

извините за плохой предмет темы, но я не мог выяснить, что написать правильно. (пожалуйста, исправьте тему, если она не понята).

Итак, моя проблема: У меня есть интерфейс Shape и два класса реализуют после этого Circle и Square. Мне нужно написать класс, который будет собирать круг и квадрат. Это должен быть один из методов сбора, который не будет добавлять дубликаты объектов. Я выбрал «набор» после прочтения в документации Java. Но я не уверен, что это была хорошая идея. (Я могу использовать один из четырех методов: map. set. list. или queque).

В конце концов я создал еще один класс с именем ShapeSet и методом

public void ShapeSet(Shape Set)

Это выглядит так:

public class ShapeSet {
    public ShapeSet() {}

    Set <Shape> setting; //is it wrong? 
    public void addShape(Shape shape) {
    setting.add(shape);
    }
...

}

После этого, думая, что я делаю правильно, я создал в основном классе конструктор, определяющий квадрат и круг. Я создал также ShapeSet ss.

public static void main(String[] args) {
        // TODO code application logic here
        ShapeSet ss = new shapes.ShapeSet();
        Shape c = new Circle(3);
        Shape s = new Square(4);
        ss.addShape(c);
        ss.addShape(s);
        ss.iterator();
    }

Но во время работы программы я получил ошибку в строке ss.addShape (x), netbeans жалуется, что обнаружил нулевое исключение. Зачем? ; (Я думаю, что типы, введенные в метод shapeset, были неправильными и, возможно, неправильной позицией объявления установки набора. Но как это исправить? Я новичок в Java. Я благодарен за помощь. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 20 марта 2011

Ответ об исключении NullPointerException, вероятно, заключается в том, что в вашем классе ShapeSet вы не выделили поле 'setting' для элемента-члена, как в

Set <Shape> setting = new HashSet<Shape>();

Однако у меня возник вопрос: зачем нужен класс ShapeSet?совсем?Похоже, вам нужно только установить Set как поле в классе, который имеет метод main.

0 голосов
/ 20 марта 2011

Я согласен с @MeBigFatGuy - вам не нужен ваш ShapeSet класс.Вы можете написать свой основной код так:

public static void main(String[] args) {
    Set<Shape> ss = new HashSet<Shape>(); // or some other Set concrete class
    Shape c = new Circle(3);
    Shape s = new Square(4);
    ss.add(c);
    ss.add(s);
    ss.iterator(); // actually, you'd want to do something with the iterator
}
0 голосов
/ 20 марта 2011

Вы забыли инициализировать свое поле setting

public class ShapeSet {
    public ShapeSet() {}

    Set <Shape> setting = new HashSet<Shape>();

    public void addShape(Shape shape) {
        setting.add(shape);
    }
...

}
...