Ho un programma dove devo implementare un albero, ho creato la classe Node<E>, e Albero<E>.
Solo che quando nel main provo a costruire l'oggetto albero non mi trova il costruttore, temo dipenda dai tipi, le classi sono queste:
Node
Alberocodice:public class Node<E> { private E label; private Node<E> left; private Node<E> right; private Node<E> parent; public Node(E label) { this.label=label; left=null; right=null; parent=null; } public void setParent(Node<E> parent){this.parent=parent;} public Node<E> getParent(){return parent;} public void SetLabel(E label){this.label=label;} public E getLabel(){return label;} public void setLeft(Node<E> left){this.left=left;} public void setRight(Node<E> right){this.right=right;} public Node<E> getLeft(){return left;} public Node<E> getRight(){return right;} public boolean hasLeft(){return left!=null;} public boolean hasRight(){return right!=null;} }
E il main:codice:interface Tree<E extends Comparable> { //restituisce la radidce dell'albero public Node<E> getRoot(); //effettua una visita postorder nell'albero public E[] postorder(); //restituisce il numero dei nodi public int nodes(); //effettua una visita preorder nell'albero //public E[] preorder(); //stampa i nodi dell'albero secondo una delle due visite a piacere public String toString(); } public class Albero<E extends Comparable> implements Tree<E> { private Node<E> root; private int nodes; public Albero(int nodes) { this.nodes=nodes; root=null; nodes=0; } public int nodes(){return nodes;} public void setRoot(Node<E> root){this.root=root;} public Node<E> getRoot(){return root;} public void addNode(Node<E> nuovo) { if(nodes==0) setRoot(nuovo); else{ Node<E> tmp=getRoot(); boolean inserito=false; while(!inserito) { if(tmp.getLabel().compareTo(nuovo.getLabel())>0) { if(!(tmp.hasLeft())){ tmp.setLeft(nuovo); nuovo.setParent(tmp); inserito=true; } else tmp=tmp.getLeft(); } else if(tmp.getLabel().compareTo(nuovo.getLabel())<0) { if(!(tmp.hasRight())){ tmp.setRight(nuovo); nuovo.setParent(tmp); inserito=true; } else tmp=tmp.getRight(); } } } nodes++; } public E[] postorder() { int index=0; E[] array=(E[]) new Object[nodes]; Stack<E> stack=new Stack(nodes); Node<E> tmp=getRoot(); Node<E> q=getRoot(); while(tmp!=null){ while(tmp!=null){ stack.push((E)tmp); if(tmp.hasRight()) stack.push((E)tmp.getRight()); tmp=tmp.getLeft(); } do{ tmp=(Node<E>)stack.pop(); if(!(tmp.hasLeft() && tmp.hasRight()) || !(tmp.hasRight()) || tmp.getRight()==q) { array[index++]=(E)tmp; q=tmp; tmp=null; } } while(tmp==null && !(stack.isEmpty())); } return array; } public String toString() { String toReturn=""; E[] array=postorder(); for(int i=0; i<array.length; i++) toReturn+=((Node<E>)array[i]).getLabel()+", "; return toReturn; } }
L'errore č:codice:import java.util.*; import java.io.*; public class Main { public static void main(String[]args) { Scanner s=null; PrintWriter out=null; try{ s=new Scanner(new File("input.txt")); out=new PrintWriter("output.txt"); String numero=s.next(); Albero albero=new Albero(Integer.parseInt(numero)); while(s.hasNext()) { String next=s.next(); if(!(next.equals(","))) { Node<Integer> nodo=new Node((Integer.parseInt(next))); albero.addNode(nodo); } } out.print(albero.toString()); } catch(IOException e1) { System.out.println("Error...I/O"); } finally{ try{ out.close(); } catch(IOException e2) { System.out.println("Error...I/O"); } } } }
Non capisco perchč non lo trovi...puņ essere perchč non specifico il tipo al momento della dichiarazione?codice:Main.java:16: cannot find symbol symbol : constructor Albero(int) location: class Albero Albero albero=new Albero(Integer.parseInt(numero)); ^
Ho provato anche a scrivere:
Ma non funziona nemmeno cosģ....cosa dovrei fare secondo voi?codice:Albero<Node<Integer>> albero=new Albero(..)

Rispondi quotando