J'ai du mal à compiler et je n'arrive pas à comprendre pourquoi. On dirait que je suis en train de chambouler quelque chose avec les classes imbriquées. Pour une raison quelconque, la classe ByManhattan n'a pas accès à Node? Si quelqu'un pouvait expliquer pourquoi c'est le message d'erreur et proposer une suggestion, cela serait utile. Merci.Classes de comparaison imbriquées imbriquées
public class Solver {
private class Node implements Comparable<Node>{
private Board board;
private Node previous;
private int moves;
private int manhattan;
private int priority;
Node(Board b, Node p) {
board = b;
previous = p;
if (previous == null)
moves = 0;
else
moves = previous.moves + 1;
manhattan = board.manhattan();
priority = moves + manhattan;
}
public int compareTo(Node that) {
return this.priority - that.priority;
}
// Why Doesn't this work???
public Comparator<Node> manhattanOrder() {
Comparator<Node> m = new ByManhattan();
return m;
}
private class ByManhattan implements Comparator<Node> {
public int compare(Node this, Node that) { // this is line 37
return this.manhattan- that.manhattan;
}
}
}
MinPQ<Node> pq;
ArrayList<Node> solution;
// find a solution to the initial board (using the A* algorithm)
public Solver(Board initial) {
.
.
.
L'erreur que je reçois est:
Solver.java:37: error: the receiver type does not match the enclosing class type
public int compare(Node this, Node that) {
^
required: Solver.Node.ByManhattan
found: Solver.Node
'this' est un mot réservé. Mauvaise pratique pour nommer un paramètre après un mot réservé, vous devriez le nommer quelque chose de différent. Changez le premier paramètre pour 'int compare (Node, Node)' – shockawave123
pas 100% mais essayez de rendre la classe de noeud statique. – shockawave123
ahhh! Merci et désolé pour la question compliquée à une solution simple. Juste en changeant le "ceci" a fonctionné. La question peut-elle être supprimée? – Paul