Pages: [1]   Go Down
Print
Author Topic: Dubbio grafo orientato LA  (Read 1705 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« on: 04-12-2009, 10:55:39 »

Ciao a tutti, per favore qualcuno mi sa dire perchè questo pezzo di codice,con grafo orientato Lista di adiacenza, nn mi stampa i nomi del file(che ho messo nel file Pezzi.txt), ma mi da altro? ecco:

import java.io.*;

public class APPELLO25_06_09            // COMPITO A
{
    public static DigrafoLA g=new DigrafoLA();
        
    public static void caricaDati() throws FileNotFoundException,Exception
    {
       // DigrafoLA g=new DigrafoLA();
        
        BufferedReader br=new BufferedReader(new FileReader("PEZZI.txt"));
        String s="";
    
        while((s=br.readLine())!=null)
        {
            String []sp=s.split("");
            for(int i=0;i<sp.length;i++)
            g.aggiungiNodo(sp(i));
        }
        br.close();
    }
    
    public static void main(String[]args)
    {
        try{
            caricaDati();
        }
        catch(FileNotFoundException e){System.out.println("Eccezione in fase di caricamento!");}
        catch(Exception ex){System.out.println("eccezione");}
      
        System.out.println(g);
        
    }
}


Mi da il seguente risultato:
Il grafo ha nodi: NodoLAor@9304b1   NodoLAor@190d11   NodoLAor@a90653   NodoLAor@de6ced   NodoLAor@c17164   NodoLAor@1fb8ee3   NodoLAor@61de33   NodoLAor@14318bb   NodoLAor@ca0b6   NodoLAor@10b30a7   NodoLAor@1a758cb   NodoLAor@1b67f74   NodoLAor@69b332   NodoLAor@173a10f   NodoLAor@530daa   NodoLAor@a62fc3   NodoLAor@89ae9e   NodoLAor@1270b73   NodoLAor@60aeb0   NodoLAor@16caf43   NodoLAor@66848c   NodoLAor@8813f2   NodoLAor@1d58aae   NodoLAor@83cc67   NodoLAor@e09713   NodoLAor@de6f34   NodoLAor@156ee8e   NodoLAor@47b480   NodoLAor@19b49e6   NodoLAor@10d448   NodoLAor@e0e1c6   NodoLAor@6ca1c   NodoLAor@1bf216a   NodoLAor@12ac982   NodoLAor@1389e4   NodoLAor@c20e24   NodoLAor@2e7263   
 e i seguenti archi:
-------------------------------------------------------------------------------------------------------------------------------------------------
Ecco la classe del grafo orientato:
public class DigrafoLA   // Grafo orientato
{
   private int numArchi;
   private LinkedList nodi;
        
    public DigrafoLA()
   {
      this(new LinkedList());
   }
    
   public DigrafoLA(LinkedList n)
   {
      numArchi=0;
        nodi=n;
   }
    
   public int getNumNodi()
   {
      int cont=0;
      Nodo aux=nodi.getHead();
      for(;aux!=null;aux=aux.getNext())
         cont++;
      return cont;
   }
   public int getNumArchi()
   {
      return numArchi;
   }
   public NodoLAor aggiungiNodo(Object c)
   {
      NodoLAor nuovo=new NodoLAor(c);
            nodi.insertTail(nuovo);
            
            return nuovo;
   }
   public void aggiungiArco(Comparable a,Comparable b)
   {
      NodoLAor s=cerca(a);
      NodoLAor d=cerca(b);
      aggiungiArco(s,d);
   }
   public void aggiungiArco(NodoLAor x, NodoLAor y)
   {
      if(x.isArco(y))
         return;
      else
      {
         x.LA.insertTail(y);
         numArchi++;
      }
   }
   public NodoLAor cerca(Comparable c)
   {
      Nodo aux=nodi.getHead();
      NodoLAor temp=null;
      for(;aux!=null&&temp==null;aux=aux.getNext())
         if((((Comparable)((NodoLAor)aux.getInfo())).compareTo(c)==0))
            temp=(NodoLAor)aux.getInfo();
      return temp;
   }
   public void deleteNodo(Comparable c)
   {
      deleteNodo(cerca(c));
   }
   public void deleteNodo(NodoLAor x)
   {
      nodi.deleteKey(x);
      Nodo aux=nodi.getHead();
      for(;aux!=null;aux=aux.getNext())
         if(((NodoLAor)aux.getInfo()).isArco(x))
            deleteArco(((NodoLAor)aux.getInfo()),x);
   }
   public void deleteArco(Comparable c,Comparable d)
   {
      NodoLAor n=cerca(c);
      NodoLAor m=cerca(d);
      deleteArco(n,m);
   }
   public void deleteArco(NodoLAor x,NodoLAor y)
   {
      if(x.isArco(y))
      {
         x.LA.deleteKey(y);
         numArchi--;
      }
   }
    
   public int numArchiEntr(Comparable c)
   {
      return numArchiEntr(cerca(c));
   }
    
   public int numArchiUsc(Comparable c)
   {
      return numArchiUsc(cerca(c));
   }
    
   public int numArchiEntr(NodoLAor n)
   {
      Nodo p=nodi.getHead();
      int cont=0;
      for(;p!=null;p=p.getNext())
      {
         Nodo q=((NodoLAor)p.getInfo()).LA.getHead();
         for(;q!=null;q=q.getNext())
            if(q.getInfo()==n)
               cont++;
      }
      return cont;
   }
   public int numArchiUsc(NodoLAor n)
   {
      Nodo p=n.LA.getHead();
      int cont=0;
      for(;p!=null;p=p.getNext())
         cont++;
      return cont;
   }
    
    public String toString()
   {
      String s="Il grafo ha nodi: ";
      Nodo aux=nodi.getHead();
      for(;aux!=null;aux=aux.getNext())
         s+=aux.getInfo()+"\t";
      s+="\n e i seguenti archi:\n";
      for(aux=nodi.getHead();aux!=null;aux=aux.getNext())
      {
         Nodo t=((NodoLAor)aux.getInfo()).LA.getHead();
         for(;t!=null;t=t.getNext())
            if(aux!=t)
               s+=((NodoLAor)aux.getInfo())+" --> "+((NodoLAor)t.getInfo())+"\n";
      }
      return s;
      
   }
}

Grazie a chi risp!
 
« Last Edit: 04-12-2009, 15:05:12 by Fra83 » Logged
delaserna
Apprendista Forumista
**
Offline Offline

Posts: 454


« Reply #1 on: 05-12-2009, 10:55:23 »

xkè fai il toString di aux.info ke sarebbe un nodo grafo quindi ti da l'indirizzo di memoria del nodo grafo.....devi fare un toString della classe delle persone se vuoi visualizzare i nomi...
Logged
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« Reply #2 on: 05-12-2009, 11:32:25 »

Quindi devo creare il file Pezzi,e poi modificare questo toString mettendo al posto di Nodo aux=nodi.getHead(), Nodo aux=(Pezzi)nodi.getHead()? correggimi se sbaglio...grazie mille
Logged
delaserna
Apprendista Forumista
**
Offline Offline

Posts: 454


« Reply #3 on: 05-12-2009, 11:36:24 »

allora pensavo che fosse l'esame cn la classe persona,invece guardandolo bene sono solo delle stringhe....in pratica nel toString del grafo devi farti stampare il contenuto dell'oggetto stringa implementato nel nodo grafo,quindi dovresti mettere s+=aux.getInfo().getInfo()+"\t";
Logged
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« Reply #4 on: 05-12-2009, 11:42:44 »

Mi da quest'errore...:
symbol  : method getInfo()
location: class java.lang.Object
         s+=aux.getInfo().getInfo()+"\t";
                           ^
Note: DigrafoLA.java uses unchecked or unsafe operations.
Logged
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« Reply #5 on: 05-12-2009, 11:55:53 »

Ci sono riuscito! ho fatto cosi:  s+=((NodoLAor)aux.getInfo()).getInfo()+"\t";
Ora però c'è il problema che nn mi stampa gli archi..nn mi stampa niente
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #6 on: 17-12-2009, 18:19:00 »

scusami,ma inserendo i nodi in questo modo,non avrai una sequenza di nodi ripetuta:
1,2,2,5,2,6???
cioè non controlli che i nodi vengano ripetuti nel grafo?
Logged
Pages: [1]   Go Up
Print
Jump to: