Функция Collections.max возвращает хэш-коды (я думаю)

Я считаю, что моя функция Collections.max возвращает хэш-коды, но, честно говоря, я не совсем уверен, что происходит.

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

public class Tree {
    public double suitability = Math.random();
    public int id;
    public static int count = 1;

    public Tree(double suitability, int id) {
        this.id = count;
        count++;    
    }

    public double getSuit() {
        return suitability;
    }

    public void setSuit(double suitability) {
        this.suitability = suitability;
    }

    public void measureSuit() {
           System.out.println("Tree number " + id + " has a suitability of " + suitability);
    }

}

class SuitComp implements Comparator<Tree> {

    @Override
    public int compare(Tree o1, Tree o2) {
        return Double.compare(o1.getSuit(), o2.getSuit());
    }   
} 


public class EmeraldRunner {

    public static void main(String[] args) {

        ArrayList<Tree> trees = new ArrayList<Tree>();

        Tree tree;

        int treeCount = 10;
        for (int i = 0; i < treeCount; i++) {
        tree = new Tree(i, i);

        trees.add(tree)

        Tree maxTree = Collections.max(trees, new SuitComp());

        System.out.println(maxTree);
        tree.measureSuit();

        }

    }

}

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

learnFromCave.Tree@60f32dde

Дерево № 1 имеет пригодность 0,6114866528786418

learnFromCave.Tree@60f32dde

Дерево № 2 имеет пригодность 0,28381422309266247

learnFromCave.Tree@3312b1dd

Дерево № 3 имеет пригодность 0,8441348268153896

learnFromCave.Tree@3312b1dd

Дерево № 4 имеет пригодность 0,6269071898386682

learnFromCave.Tree@3312b1dd

Дерево № 5 имеет пригодность 0,08717540188464434

learnFromCave.Tree@3312b1dd

Дерево № 6 имеет пригодность 0,3810530158434646

learnFromCave.Tree@3312b1dd

Дерево № 7 имеет пригодность 0,0938353693923476

learnFromCave.Tree@3312b1dd

Дерево № 8 имеет пригодность 0,3656868216321937

learnFromCave.Tree@105b3e5d

Дерево № 9 имеет пригодность 0,9717207037612301

learnFromCave.Tree@105b3e5d

Дерево № 10 имеет пригодность 0,44423960773823645

1 ответ

Решение

System.out.println(maxTree);звонки toString() на maxTree, Поскольку вы не переопределили его, он вызывает метод Object, который просто выводит полное имя класса и некоторую дополнительную информацию.

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

public class Tree {
    public double suitability = Math.random();
    public int id;
    public static int count = 1;

    public Tree(double suitability, int id) {
        this.id = count;
        count++;
    }

    public double getSuit() {
        return suitability;
    }

    public void setSuit(double suitability) {
        this.suitability = suitability;
    }

    public void measureSuit() {
        System.out.println("Tree number " + id + " has a suitability of " + suitability);
    }

    @Override
    public String toString() {
        return "I am the tree with id " + id;
    }
}
Другие вопросы по тегам