Pages: [1]   Go Down
Print
Author Topic: problema archi con grafi  (Read 1156 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« on: 08-12-2009, 14:59:42 »

Salve a tutti..nn capisco perchè nei grafi con lista di adiacenza non mi stampa gli archi... questo è il metodo toString della classe grafo orientato(con lista di adiacenza):

public String toString()
   {
      String s="Il grafo ha nodi: ";
      Nodo aux=nodi.getHead();
      for(;aux!=null;aux=aux.getNext())
         s+=((NodoLAor)aux.getInfo()).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()).getInfo()+" --> "+((NodoLAor)t.getInfo()).getInfo()+"\n";
      }
      return s;
      
   }

Dove sbaglio??

O forse devo mettere qualcosa nel main? ecco il main(un esempio):

import java.io.*;

public class APPELLO25_06_09            // COMPITO A
{
    public static DigrafoLA g=new DigrafoLA();
       
    public static void caricaDati() throws FileNotFoundException,Exception
    {
       
        BufferedReader br=new BufferedReader(new FileReader("PEZZI.txt"));
        String s="";
   
        while((s=br.readLine())!=null)
        {
   
              g.aggiungiNodo(s);
           
        }
        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");}
       
   }
}

Mi stampa solo i nodi..ma per gli archi nn mi stampa nulla...
Qualcuno può aiutarmi per favore? grazie mille

Logged
ciccio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 143



« Reply #1 on: 10-12-2009, 16:15:38 »

guarda secondo me quell' if(aux!=t) non ha senso...tu controlli che il nodo contenente la lista di adiacenza sia diverso dal nodo presente nella sua lista di adiacenza e se ci pensi non può essere che un nodo abbia se stesso nella propria lista di adiacenza... E' anche vero che, cmq quella condizione dovrebbe sempre essere verificata, prova a togliere so controllo e facci sapere. ciao
Logged

"Non importa quanto vai piano, l' importante è che non ti fermi" (CONFUCIO)
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« Reply #2 on: 10-12-2009, 17:08:36 »

Ho provato a togliere quel controllo, ma nn cambia niente...Il problema secondo me è nel main, cioè come faccio g.aggiungiNodo dovrei anche aggiungere gli archi, ma non so che parametri mettere in g.aggiungiArco()...il problema è questo...cmq grazie per il consiglio...spero qualcuno mi possa aiutare a risolvere sto problema...
Logged
ciccio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 143



« Reply #3 on: 11-12-2009, 08:54:19 »

sono riuscito a recuperare il testo dell'esame in questione. In sostanza l'errore o sta nel main o nel metodo aggiungiNodo(s). Difatti la stringa s che passi come parametro al metodo contiene due informazioni: i nodi da inserire nella lista nodi (es. pz1 e pz3) e l'arco che va da pz1 a pz3. In altre parole o dentro il metodo caricaDati() o direttamente dentro aggiungiNodo(s) devi fare lo split di s, cioè dividere la stringa in funzione di un carattere, in questo caso lo spazio (split è un metodo della classe String, vatti a vedere le API Java per comprendere cosa fa). Ricapitolando ecco come farei io: dentro il metodo caricaDati(), dentro il while, prima di chiamare aggiungiNodo(), crei un nuovo array di stringhe temporaneo e chiami il metodo split su s, passando come parametro il carattere spazio...in codice:

String[] str= s.split(" ");

così se s era la stringa "pz1 pz3", avrai str[0]=pz1 e str[1]=pz3.

a questo punto, sempre dentro il while puoi chiamare il metodo aggiungiNodo(str[0], str[1]) dando appunto i parametri già "elaborati" (potevi sempre passare semplicemete s senza split come hai fatto, ma poi avresti dovuto estrapolare le sottostringhe di s dentro aggiungiNodo(String s)...vedi tu quale ti sembra la soluzione piu logica).

sempre dentro aggiungiNodo(String x, String y) poi avresti dovuto prima inserire x e y nella lista nodi (se già non c'erano) e poi creare un arco da x a y (e se non mi sbaglio stava proprio qua il tuo problema)

ho cercato di essere il piu chiaro possibile, ma se hai ancora qualche dubbio, se potrò, sarò felice di aiutarti. ora meglio che vado a ripassare un po di interazione che fra un paio d'ore c'è la prova in itinere...ciaoo
Logged

"Non importa quanto vai piano, l' importante è che non ti fermi" (CONFUCIO)
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« Reply #4 on: 11-12-2009, 10:48:34 »

ok, adesso provo un po....grazie mille!! in bocca al lupo per la prova!
Logged
Fra83
Apprendista Forumista
**
Offline Offline

Posts: 213



« Reply #5 on: 12-12-2009, 17:18:28 »

Finalmente sono riuscito a fare stampare gli archi...si dovevano aggiungere gli archi con g.aggiungiArco(x,y)...
Grazie ciccio, sei stato utilissimo!!
Logged
ciccio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 143



« Reply #6 on: 14-12-2009, 18:49:51 »

Grazie ciccio, sei stato utilissimo!!

figurati!
Logged

"Non importa quanto vai piano, l' importante è che non ti fermi" (CONFUCIO)
Pages: [1]   Go Up
Print
Jump to: