Revision: 13 Author: svanerac Date: Thu Oct 15 07:02:36 2009 Log: Nuova versione con un input da tastiera finalmente funzionante http://code.google.com/p/cooperativefsm/source/detail?r=13 Modified: /trunk/cooperativefsm/src/cooperativefsm/Fsm.java /trunk/cooperativefsm/src/cooperativefsm/Input.java /trunk/cooperativefsm/src/cooperativefsm/InputTast.java /trunk/cooperativefsm/src/cooperativefsm/InputXML.java /trunk/cooperativefsm/src/cooperativefsm/Main.java /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java /trunk/cooperativefsm/src/cooperativefsm/Servizio.java /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java /trunk/cooperativefsm/src/cooperativefsm/Transizione.java =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Thu Oct 15 07:02:36 2009
@@ -46,6 +46,14 @@ return id; } + public int getNumStati(){ + numStati = stati.size(); + return numStati; + } + + public int getNumTr(){ + return transizioni.size(); + }public void addStato(Stato s) { //aggiunge uno stato al vector listaStati
stati.add(s); } @@ -92,5 +100,18 @@ //TODO } + public String ToString () + { + String s = new String(); + s = ("\nNome della Fsm: " + id + + "\nNumero di stati: " + numStati + + "\nElenco delle transizioni: " ); + + for (int i = 0; i<transizioni.size(); i++) + { + s.concat(transizioni.get(i).ToString()); + } + return s; + } } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Input.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Input.java Thu Oct 15 07:02:36 2009
@@ -5,222 +5,29 @@ * @author Alessandro Ferrari, Carlo Svanera, Luca Cominardi */ import java.util.Vector; -import java.lang.*; - - -public abstract class Input { - - -- //Per i nomi degli attributi fai riferimento ai diagrammi uml che ho fatto
-- //Questi attributi sono in realtà variabili di appoggio che servono ai metodi (astatti) ... SERVONO????
- //private Vector<Stato> listaS; - //private Vector<Transizione> listaT; -- //La documentazione su come deve essere relazioniTransizioni è presente nelle mail
- //Se non è ancora chiara contattami -- private Simulazione.Relazione relazioniTransizioni[][]; //Relazione è un tipo enum che definisce i tipi di relazione
- private Vector<Fsm> listaFsm; - - - + +public abstract class Input +{ + /** - * Metodo che inizializza una vera e propria sessione di simulazione+ * Metodo astratto che inizializza una vera e propria sessione di simulazione
* La chiamata è comune sia per istanze di IputTast sia di InputXML,- * mentre i metodi che devono specializzarsi sono sovrascritti nelle sottoclassi
+ * mentre il metodo è sovrascritto nelle sottoclassi */ - public Simulazione leggiSimulazione() - { - this.inizializzaListaFsm(); - -- for (int i = 0; i < listaFsm.size(); i++) //si inizializza ogni istanza di fsm nella listaFsm - { //con i suoi stati e le sue transizioni
- Fsm appoggio = listaFsm.elementAt(i); -- int numStati = this.leggiNumStati(); //inserimento degli stati
- this.inizializzaStati(appoggio, numStati); -- this.inizializzaTrans(appoggio); //inserimento delle transizioni
- } -- StatoCorrente statoIniziale = leggiStatoIniziale(listaFsm); //Lettura stato iniziale - relazioniTransizioni = leggiNumRelazioni(); //Lettura relazioni
- - while (ciSonoRelaz()) - imposta(relazioniTransizioni); -- if(!simulazioneCorretta() ) //Controllo dei vincoli di correttezza della simulazione
- {- System.out.println("I dati inseriti non sono validi!");;
- } - -- return (new Simulazione(listaFsm, relazioniTransizioni, statoIniziale)); //L'interfaccia tra io e core è data da questa riga, è l'unico punto di incontro
- } + public abstract Simulazione leggiSimulazione(); -- //questi metodi in teoria saranno mai invocati perchè non sono mai create istanze della clase Input; - //saranno le loro versioni sovrascritte nelle varie sottoclassi a funzionare
- - public abstract int leggiNumStati(); - - public abstract boolean ciSonoTrans(); - - public abstract Stato leggiStato(String a); - /** * Metodo che imposta lo stato iniziale e imposta lo stato corrente - * lo stato deve € al vettore macch1.listaStati --->controllo! - * @return + * + * @return Lo stato iniziale della simulazione */ public abstract StatoCorrente leggiStatoIniziale(Vector<Fsm> list); - public abstract void imposta(Simulazione.Relazione[][] relaz); - - public abstract boolean ciSonoRelaz(); - - - //fine metodi abstract - - - - public Vector<Fsm> getListaFsm () - { - return listaFsm; - } - - - - - /**- * Metodo indipendente dal tipo di input, verrà chiamato da entrambe le sottoclassi. - * Definisce e istanzia un certo numero (2 in questo caso) di Fsm per la simulazione
- */ - - public void inizializzaListaFsm() - { - int numFsm = 2; - - for(int i = 0; i < numFsm; i++) - { - Fsm fsm = creaFsm (Integer.toString(i)); - listaFsm.add(fsm); - } - } - - - - /** - * Metodo che crea la lista degli stati di una fsm - *- * @param Serve per identificare la fsm nel file xml, oppure è il nome assegnatole da tastiera
- * @param Numero di stati - */ - - public void inizializzaStati (Fsm x, int numStat) - { - for (int i = 0; i < numStat; i++) - { - Stato s = new Stato (i); - x.addStato(s); - } - } - - - - - - /** - * Metodo che crea la lista delle transizioni di una fsm - * - * @param La Fsm a cui va aggiunta una transizione - * @param Stato sorgente della transizione - * @param Stato destinazione della transizione - */ - public void inizializzaTrans (Fsm x) - { - -- boolean continua = this.ciSonoTrans(); //metodo che verrà sovrascritto dalle sottoclassi
- - while (continua) - { - Stato sorgente = this.leggiStato("sorgente"); - Stato destinazione = this.leggiStato("destinazione");- //Controllo per verificare che gli stati € alla fsm [...] <--------------TODO------------------!!!!!
- - Transizione t = new Transizione (sorgente,destinazione); - x.addTrans(t); - - continua = this.ciSonoTrans(); - }//while - - - } - - - - - /*- * Metodo che crea un'istanza di Fsm a partire dalla variabili globali che sono
- * già state inizializzate - * @return la nuova istanza di Fsm - */ - - public Fsm creaFsm (String nome) - { - Fsm macchina= new Fsm ( nome ); - return macchina; - } - - - - - - - - /** - * Metodo che ricava le relazioni tra le transizioni delle 2 FSM- * @return il vettore contenente le relazioni tra TUTTE le transizioni [...]
- */ - public Simulazione.Relazione[][] leggiNumRelazioni () - {- int n = listaFsm.elementAt(0).getTransizioni().size();//N° transizioni prima fsm - int m = listaFsm.elementAt(1).getTransizioni().size();//..seconda - Simulazione.Relazione relazioniTransizioni[][] = (new Simulazione.Relazione [n+1][m+1]);
- - for (int i=0; i<n+1; i++) - { - for(int j=0; j<m+1; j++)- relazioniTransizioni[i][j] = relazioniTransizioni[i][j].ASINCRONA; //di default le transizioni sono asincrone tra loro, - //solo quelle sincrone e m-ex saranno specificate
- } - - return relazioniTransizioni; - } - - - - - /**- * Metodo che controlla la correttezza delle informazione relative alla simulazione
- * che sono state introdotte/lette - * - */ - public boolean simulazioneCorretta () - { - boolean correct = true; - - //TODO - - return correct; - } + + } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/InputTast.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/InputTast.java Thu Oct 15 07:02:36 2009
@@ -10,9 +10,8 @@ import java.util.Vector; public class InputTast extends Input -{ - - private final String RICH_STATI = "Inserisci il numero di stati: "; +{+ private final String RICH_STATI = "Inserisci il numero di stati della fsm "; private final String RICH_TRANS = "Vuoi inserire una nuova transizione? ";
private final String INS_STATO = "Inserire il numero dello stato ";private final String INS_RELAZ = "Vuoi inserire una nuova relazione tra transizioni? ";
@@ -21,77 +20,215 @@ private final int min_stati = 2; -+ private Simulazione.Relazione relazioniTransizioni[][]; //Relazione è un tipo enum che definisce i tipi di relazione
+ private Vector<Fsm> listaFsm; + private StatoCorrente statoIniziale; + + /** * Costruttore specializzato per l'input da tastiera. */ public InputTast () { - + listaFsm = new Vector<Fsm> (); + } + + public @Override Simulazione leggiSimulazione() + { + this.inizializzaListaFsm(); ++ for (int i = 0; i < listaFsm.size(); i++) //si inizializza ogni istanza di fsm nella listaFsm + { //con i suoi stati e le sue transizioni
+ Fsm appoggio = listaFsm.elementAt(i); ++ int numStati = this.leggiNumStati(appoggio.getId()); //inserimento degli stati
+ this.inizializzaStati(appoggio, numStati); ++ this.inizializzaTrans(appoggio); //inserimento delle transizioni
+ } ++ statoIniziale = leggiStatoIniziale(listaFsm); //Lettura stato iniziale
++ relazioniTransizioni = initRelazioni(); //Inizializza l'array bidimensionale di relazioni
+ while (ciSonoRelaz()) + imposta(relazioniTransizioni, listaFsm); + + + System.out.println("Simulazione caricata correttamente!");+ return (new Simulazione(listaFsm, relazioniTransizioni, statoIniziale)); //L'interfaccia tra io e core è data da questa riga, è l'unico punto di incontro
+ + } + + + /**+ * Definisce e istanzia un certo numero (2 in questo caso) di Fsm per la simulazione
+ */ + + public void inizializzaListaFsm() + { + int numFsm = 2; + for(int i = 0; i < numFsm; i++) + { + Fsm fsm = creaFsm (Integer.toString(i)); + listaFsm.add(fsm); + } + } + + + public int leggiNumStati (String nome_fsm) + {+ return Servizio.leggiIntConMinimo(RICH_STATI + nome_fsm + ": ", min_stati);
} - - public @Override Stato leggiStato (String a) - {- Stato s = new Stato (Servizio.leggiInteroConMinimo(INS_STATO + a + ": ", 0));
+ + /** + * Metodo che crea la lista degli stati di una fsm + * + * @param Fsm di appoggio + * @param Numero di stati + */ + + public void inizializzaStati (Fsm x, int numStat) + { + for (int i = 0; i < numStat; i++) + { + Stato s = new Stato (i); + x.addStato(s); + } + } + + public Stato leggiStato (String a) + { + int id = Servizio.leggiIntConMinimo(INS_STATO + a + ": ", 0); + Stato s = new Stato (id); return s; } - - public @Override int leggiNumStati () - {- int numStati = Servizio.leggiInteroConMinimo(RICH_STATI, min_stati);
- return numStati; + public Stato leggiStatoConMax (String a, int max) + { + int id = Servizio.leggiInt(INS_STATO + a + ": ", 0, max); + Stato s = new Stato (id); + return s; } + + /** + * Metodo che crea la lista delle transizioni di una fsm + * @param La Fsm a cui vanno aggiunte un certo numero di transizioni + */ + public void inizializzaTrans (Fsm x) + {+ boolean continua = this.ciSonoTrans(); //metodo che verrà sovrascritto dalle sottoclassi
+ + while (continua) + {+ Stato sorgente = this.leggiStatoConMax("sorgente", x.getNumStati()-1); + Stato destinazione = this.leggiStatoConMax("destinazione", x.getNumStati()-1);
+ + Transizione t = new Transizione (sorgente,destinazione); + x.addTrans(t); + System.out.println("Transizione inserita correttamente!"); + + continua = this.ciSonoTrans(); + }//while + } /** - *+ * Verifica l'appartenenza di una transizione a una fsm, in base al suo numero progressivo
+ * @param num + * @param m * @return */ - public @Override boolean ciSonoTrans () - { - boolean ciSono = Servizio.yesOrNo(RICH_TRANS); - return ciSono; - } + public boolean appartTr (int num , Fsm m) + { + int n = m.getTransizioni().size(); + return num < n ; + } + + /** + * + * @return + */ + public boolean ciSonoTrans () + { + return Servizio.yesOrNo(RICH_TRANS); + } + + + public boolean ciSonoRelaz() + { + return Servizio.yesOrNo(INS_RELAZ); + } + /** * - * @param lista: la lista contenente le fsm - * @return lo stato corrente + * @param la lista contenente le fsm + * @return lo stato iniziale della simulazione * */ public @Override StatoCorrente leggiStatoIniziale (Vector<Fsm> lista) { StatoCorrente s = new StatoCorrente (); -- Stato c1 = leggiStato("corrente della fsm " + lista.get(0).getId()); - Stato c2 = leggiStato("corrente della fsm " + lista.get(1).getId());
- - //TODO controllo di appartenenza ++ Stato c1 = leggiStatoConMax("corrente della fsm " + lista.get(0).getId(), lista.get(0).getNumStati() - 1); + Stato c2 = leggiStatoConMax("corrente della fsm " + lista.get(1).getId(), lista.get(1).getNumStati() - 1);
s.setStati( c1, c2 ); + return s; } - public @Override boolean ciSonoRelaz() - { - return Servizio.yesOrNo(INS_RELAZ); - } - - /** + + + + /*+ * Metodo che crea un'istanza di Fsm a partire dalla variabili globali che sono
+ * già state inizializzate + * @return la nuova istanza di Fsm + */ + + public Fsm creaFsm (String nome) + { + Fsm macchina= new Fsm ( nome ); + return macchina; + } + + + + +/** + * Metodo che ricava le relazioni tra le transizioni delle 2 FSM+ * @return il vettore contenente le relazioni tra TUTTE le transizioni [...]
+ */ + public Simulazione.Relazione[][] initRelazioni () + {+ int n = listaFsm.elementAt(0).getTransizioni().size();//N° transizioni prima fsm + int m = listaFsm.elementAt(1).getTransizioni().size();//..seconda + Simulazione.Relazione relazioniTransizioni[][] = (new Simulazione.Relazione [n+1][m+1]);
+ + for (int i=0; i<n+1; i++) + { + for(int j=0; j<m+1; j++)+ relazioniTransizioni[i][j] = relazioniTransizioni[i][j].ASINCRONA; //di default le transizioni sono asincrone tra loro, + //solo quelle sincrone e m-ex saranno specificate
+ } + + return relazioniTransizioni; + } + + + /** * imposta una relazione tra due transizioni € a due fsm diverse * @param relaz */ - public @Override void imposta(Simulazione.Relazione[][] relaz) - {- int t1 = Servizio.leggiInteroConMinimo("Transizione di riferimento della fsm 1", 0);
- //controllo di appartenenza- int t2 = Servizio.leggiInteroConMinimo("Transizione di riferimento della fsm 2", 0);
- //controllo di appartenenza -+ public boolean imposta(Simulazione.Relazione[][] relaz, Vector<Fsm> list)
+ {+ int t1 = Servizio.leggiInt("Transizione di riferimento della fsm 1", 0, list.get(0).getNumTr()- 1); + int t2 = Servizio.leggiInt("Transizione di riferimento della fsm 2", 0, list.get(1).getNumTr() - 1);
+ MyMenu sceltaTipo = new MyMenu ( TIPO_RELAZ, SCELTA_RELAZ); int sel = sceltaTipo.scegli(); @@ -101,5 +238,10 @@ case 2: (relaz[t1][t2]) = (relaz[t1][t2]).M_EX; break; } - } -} + + System.out.println("Relazione aggiunta correttamente!"); + return true; + } + + +} =======================================--- /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Thu Oct 15 07:02:36 2009
@@ -10,24 +10,29 @@ * @author Renato */ + + import java.util.Vector; public class InputXML extends Input { - public InputXML() - { - } - - public @Override int leggiNumStati(){return 0;} - - public @Override boolean ciSonoTrans(){ return true;} - - public @Override boolean ciSonoRelaz() {return true;} - - public @Override void imposta (Simulazione.Relazione [][] relaz) {} - - public @Override Stato leggiStato(String a){ return new Stato(0);}+ private Simulazione.Relazione relazioniTransizioni[][]; //Relazione è un tipo enum che definisce i tipi di relazione
+ private Vector<Fsm> listaFsm; + private StatoCorrente statoIniziale; + + + public InputXML() + { + + } + + public @Override Simulazione leggiSimulazione() + {+ return new Simulazione(listaFsm, relazioniTransizioni, statoIniziale);
+ }public @Override StatoCorrente leggiStatoIniziale(Vector<Fsm> list) {return new StatoCorrente();}
-} + + +} =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Main.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Main.java Thu Oct 15 07:02:36 2009
@@ -13,7 +13,6 @@ * @author Cominardi Luca, Ferrari Alessandro, Svanera Carlo */ - public class Main { /** @@ -27,7 +26,7 @@ final String MESS_FINALE = "CIAO!"; MyMenu menuInput = new MyMenu( TIPOINPUT , SCELTAINPUT ); - boolean fineProgramma=false; + boolean fineProgramma = false; int selezione = menuInput.scegli(); @@ -35,25 +34,29 @@ switch (selezione) { - case 1: {in = new InputTast(); System.out.println("ok");} - case 2: in = new InputXML(); - default : System.out.println("boh"); + case 1: {in = new InputTast(); + break; + } + case 2: {in = new InputXML(); + break; + } + case 0: { + System.out.println(MESS_FINALE); + System.exit(0); + } } -- Simulazione s = in.leggiSimulazione(); //leggiSimulazione è un metodo della classe Input, + Simulazione s = in.leggiSimulazione(); //leggiSimulazione è un metodo della classe Input, //da cui ereditano le classi InputTast e InputXML
- - while (!fineProgramma) - { - fineProgramma = s.eseguiIterazione(); + //while (!fineProgramma) + { + //fineProgramma = s.eseguiIterazione(); } + //System.out.println(s.getListaFsm().get(0).ToString()); + //System.out.println(s.getListaFsm().get(1).ToString()); System.out.println(MESS_FINALE); - - - } - - -} + } + +} =======================================--- /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java Thu Oct 15 07:02:36 2009
@@ -33,7 +33,7 @@public int scegli () //NB: non è stato fatto nessun controllo che il carattere inserito sia un intero
{ stampaMenu(); - return Servizio.leggiIntero(RICHIESTA_INSERIMENTO, 0 ,voci.length); + return Servizio.leggiInt(RICHIESTA_INSERIMENTO, 0 ,voci.length); } public void stampaMenu () =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Servizio.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Servizio.java Thu Oct 15 07:02:36 2009
@@ -6,7 +6,7 @@ */ import java.util.Scanner; import java.io.*; -import java.lang.*; + public class Servizio { @@ -21,9 +21,46 @@ private final static char RISPOSTA_SI='S'; private final static char RISPOSTA_NO='N'; - - - private static Scanner creaScanner ()+ private static InputStreamReader reader = new InputStreamReader (System.in); + private static BufferedReader myInput = new BufferedReader (reader);
+ + public static String leggiString(String messaggio) + {+ //InputStreamReader reader = new InputStreamReader (System.in);
+ //BufferedReader myInput = new BufferedReader (reader); + System.out.println (messaggio); + String str= new String(); + try + { + str = myInput.readLine(); + } + catch (IOException e) + { + System.out.println ("Si è verificato un errore: " + e); + System.exit(-1); + } + return str; + } + + public static int leggiInt(String messaggio) + { + + int i=0; + String a = leggiString(messaggio); + try + { + i = Integer.parseInt(a); + } + catch (Exception e) + { + System.out.println ("Devi inserire un intero! "); + return leggiInt(messaggio); + } + return i; + } + + + private static Scanner creaScanner () { Scanner creato = new Scanner(System.in); creato.useDelimiter(System.getProperty("line.separator")); @@ -76,6 +113,27 @@ return valoreLetto; } + public static char leggiCaratt (String messaggio) + { + boolean finito = false; + char valoreLetto = '\0'; + do + { + String lettura = leggiString(messaggio); + if (lettura.length() > 0) + { + valoreLetto = lettura.charAt(0); + finito = true; + } + else + { + System.out.println(ERRORE_STRINGA_VUOTA); + } + } while (!finito); + + return valoreLetto; + } + public static boolean yesOrNo(String messaggio) { String mioMessaggio = messaggio + "("+RISPOSTA_SI+"/"+RISPOSTA_NO+")"; @@ -93,7 +151,7 @@ char valoreLetto = '\0'; do { - valoreLetto = leggiChar(messaggio); + valoreLetto = leggiCaratt(messaggio); valoreLetto = Character.toUpperCase(valoreLetto); if (ammissibili.indexOf(valoreLetto) != -1) finito = true; @@ -125,13 +183,13 @@ return valoreLetto; } - public static int leggiInteroConMinimo(String messaggio, int minimo) + public static int leggiIntConMinimo(String messaggio, int minimo) { boolean finito = false; int valoreLetto = 0; do { - valoreLetto = leggiIntero(messaggio); + valoreLetto = leggiInt(messaggio); if (valoreLetto >= minimo) finito = true; else @@ -141,13 +199,13 @@ return valoreLetto; } - public static int leggiIntero(String messaggio, int minimo, int massimo) + public static int leggiInt(String messaggio, int minimo, int massimo) { boolean finito = false; int valoreLetto = 0; do { - valoreLetto = leggiIntero(messaggio); + valoreLetto = leggiInt(messaggio); if (valoreLetto >= minimo && valoreLetto<= massimo) finito = true; else =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java Thu Oct 15 07:02:36 2009
@@ -33,9 +33,9 @@ * @see Input,InputXML,InputTast */- public Simulazione (Vector<Fsm> listaFSM, Relazione relazioni[][], StatoCorrente sc)
- { - listaFsm = listaFSM;+ public Simulazione (Vector<Fsm> _listaFsm, Relazione relazioni[][], StatoCorrente sc)
+ { + listaFsm = _listaFsm; relazioniTransizioni = relazioni; statoCorrente = sc; } @@ -47,6 +47,11 @@ * state. * */ + + public Vector<Fsm> getListaFsm() + { + return listaFsm; + } private void setTransizioniAbilitate(){ //TODO: vedi macchina a stati finiti uml =======================================--- /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Thu Oct 15 07:02:36 2009
@@ -11,6 +11,12 @@ { public Stato sCorrenteFsm1; public Stato sCorrenteFsm2; + + public StatoCorrente () + { + sCorrenteFsm1 = new Stato(0); + sCorrenteFsm2 = new Stato(0); + } /** * Imposta gli stati correnti delle varie fsm @@ -21,7 +27,9 @@ */ public void setStati ( Stato corrente1, Stato corrente2 ) { + //sCorrenteFsm1 = new Stato(corrente1.getId()); sCorrenteFsm1 = corrente1; + //sCorrenteFsm2 = new Stato(corrente2.getId()); sCorrenteFsm2 = corrente2; } } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Transizione.java Tue Oct 13 07:53:08 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Transizione.java Thu Oct 15 07:02:36 2009
@@ -30,6 +30,13 @@ stato2 = _stato2; } + public String ToString() + { + String s = ("Transizione numero: " + id + + "\nDallo stato " + stato1.getId() + + " allo stato " + stato2.getId()); + return s; + }public void setNumRelazioniSincroneStatoCorrente( Simulazione.Relazione relazioni[][])
{