Ошибка переполнения, относящаяся к сравнению - PullRequest
0 голосов
/ 22 марта 2019

У меня есть класс Item, который реализует Comparable и имеет метод CompareTo. Я хочу сравнить объект o с другими предметами. Я наложил o на Item.

В отдельном классе Inventory у меня есть метод для вставки предметов в инвентарь. Но я только хочу вставить, если их номера продуктов отличаются. Поэтому я пытаюсь вызвать метод compareTo () для сравнения номеров элементов, но получаю ошибку переполнения стека.

Я пробовал p.compareTo (iter.next), потому что я хочу, чтобы он просматривал все элементы в списке. Извините, форматирование не идеально. первый пост здесь.

public class item{
    public int compareTo(Object o){
        result = compareTo((Product)o);         
        if (result < 0){
            return -1;
        }
        else if (result == 0){
            return 0;
        }
        else{
            return 1;
        }
    }
}

public class ProductInventory extends Product {
    private void insert(Product p){
        Iterator<Product> iter = list.iterator();
        if (list.size() == 0) {
            list.addFirst(p);           
        }
        while(iter.hasNext()) {
            p.compareTo(iter.next());           
            //if (p.getNumber() != iter.next().getNumber()) {
            System.out.print("RESULT:" + result);
            if (result != 0) {
                list.addFirst(p);
            }
            else {
                System.out.print("DUPLICATE");
            }
            iter.next();
        }
}

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

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Может быть, вам нужно это:

public class ProductInventory extends Product {
    private void insert(Product p) {
        if (!list.contains(p)) {
            list.add(0, p);
        }
    }
}
0 голосов
/ 22 марта 2019

Метод compareTo в вашем классе элементов бесконечно повторяется в этой строке:

result = compareTo((Product)o); //this is a self-call!

Вы хотите заменить эту строку реализацией для compareTo, например:

result = this.value - that.value; //insert actual logic here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...