Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [Java] Metodi Oggetti

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12

    Metodi Oggetti

    Ciao a tutti
    Devo creare diversi metodi ma immagino di aver fatto una immensità di errori, chi è così gentile da spiegarmeli ne sarei così grata....E scusate in anticipo per il disturbo...Ma non ho capito moltissime cose....


    codice:
    class OggettoCoppia {
    
       public String parola;
    
       // Questo costruttore memorizza nome e num nell'OggettoCoppia creato,
       // nome viene memorizzato nella variabile pubblica parola. Nome contiene
       // la stringa per inizializzare parola, num contiene il numero che deve
       // essere memorizato dall'oggetto. Se num è negativo allora viene
       // memorizzato zero.
    
       public OggettoCoppia (String nome, int num) {
    
           if (num < 0) {
    
    		   num = 0;
    
    	   }
    
    	   else {
    
    		   num = num;
    
    	   }
    
    	   nome = parola;
    
       }
    
       // questo metodo restituisce il numero (maggiore uguale a zero)
       // memorizzato nell'oggetto
    
    	public int getNumber (int num) {
    
    		return num;
    
    	}
    
       // memorizza num nel campo (privato) intero dell'OggettoCoppia
       // num contiene il numero da memorizzare nella coppia. Se num è negativo
       // allora viene memorizzato zero, altrimenti viene memorizzato in una
       // variabile privata
    
       public void newNumber (int num) {
    
    	   if (num < 0)
    
    	   	   num = 0;
    
    	  else
    
    	      num = OggettoCoppia[num]; //?????
    
       }
    
       // questo metodo restituisce una nuova coppia contenente una copia della
       // coppia di dati memorizzati nell'oggetto. Quindi un nuovo oggetto
       // OggettoCoppia deve essere costruito, ed inizializzato con gli stessi
       // valori contenuti nei campi dell'oggetto che vogliamo clonare.
    
       public OggettoCoppia clone() {
    
             ?????????
    
       }
    
       // questo metodo verifica se i dati (intero positivo e stringa) contenuti
       // nella coppia obj sono uguali a quelli del nostro oggetto
    
       public boolean equals (OggettoCoppia obj) {
    
    	     ????????????
    
    
       }
    
    }

    Scusate ancora ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    71
    La mia è solo una serie di piccoli appunti su alcune cose base.
    Vediamo punto per punto:
    codice:
       public OggettoCoppia (String nome, int num) {
    
           if (num < 0) {
    	num = 0;
    
            }else {
    	 num = num;
    
            }
            nome = parola;
       }
    la variabile num non è una variabile d'istanza, ossia appena concludi il metodo la variabile viene persa, dovresti dichiarare (come parola) una variabile d'istanza (public int numero ed impostare in quella in valore che ti viene passato in num (l'asseganzione num = num;, non ha senso stai impostando il valore della variabile num con il valore della variabile num....)
    potresti fare una cosa del genere

    codice:
    class OggettoCoppia {
    
       public String parola;
       public inr numero;
    
       public OggettoCoppia (String nome, int num) {
    
           if (num < 0) {
    	 numero = 0;
           }else {
    	numero = num;
          }
    
            nome = parola;
    
       }


    Nel seguente metodo, a parte che manca il return, ma il tipo che ritorni (OggettoCoppia) deve essere di tipo Object, perchè il metodo clone() è definito nella classe padre di tutte le classi, ossia Object, e quel metodo restituisce un Object.
    codice:
       public OggettoCoppia clone() {
    
             ?????????
    
       }

    Qui sotto non sicapisce bene cosa tu voglia fare, soprattutto quando scrivi num = OggettoCoppia[num];

    codice:
       // memorizza num nel campo (privato) intero dell'OggettoCoppia
       // num contiene il numero da memorizzare nella coppia. Se num è negativo
       // allora viene memorizzato zero, altrimenti viene memorizzato in una
       // variabile privata
    
       public void newNumber (int num) {
    
    	   if (num < 0)
    
    	   	   num = 0;
    
    	  else
    
    	      num = OggettoCoppia[num]; //?????
    
       }
    Queste sono le cose che a prima vista mi sono saltate all'occhio, mi sembrano le più basilari senza stare a cercare il pelo nell'uovo che sarebbe inutile per uno alle prime armi, e poi hai scritto poco.

  3. #3
    Dunque...

    all'interno di OggettoCoppia oltre a definire la stringa parola devi definire anche l'altro campo numerico. Nel codice postato da te i vari num che utilizzi sono visibili soltanto all'interno dei metodi. La classe va ristrutturata in questo modo:

    codice:
    public class OggettoCoppia{
         private String parola = "";   //setto dei valori di default per entrambi i campi (non è obbligatorio ma è consigliato farlo.
         private int num=0;
    
         /*Costruttore.
            Ho volutamente cambiato nome al parametro intero per non creare confusione 
            con la variabile num della classe. Avresti potuto comunque usare lo stesso nome
            ma in tal caso all'interno dell'if avresti dovuto scrivere this.num=0 e nell'else 
            this.num = num, in modo tale
            da riferirti alla variabile di classe e non al parametro num del metodo
         */ 
         public OggettoCoppia(String nome, int numero){              
             
              if(numero < 0){
                   num = 0;
              }else{
                   num = numero;
              }
    
              parola = nome;
         }
    
         //In questo caso non c'è possibilità di ambiguità. Con num si fa rimento al num 
         //della classe non essendo definita alcuna variabile num all'interno del metodo
         public int getNumber(){
              return num;   //oppure return this.num
         }
    
    
         //Avendo dichiarato anche parola come private aggiungo il metodo getParola
         public String getParola(){
              return parola;  //oppure this.parola
         }
    
    
         //Qui invece lascio il nome del parametro uguale in modo da evidenziare la differenza
         //tra la variabile di classe e il parametro
         public void newNumber(int num){
              if(num < 0){         // qui faccio riferimento al num parametro del metodo
                   this.num = 0;   // qui faccio riferimento al num della classe
              }else{
                   this.num = num;     //inserisco nella variabile di classe il valore del parametro del metodo
              }
         }
    
         //per eseguire il clone basta creare un nuovo OggettoCopia e passare nel costruttore
         //i valori delle variabili dell'OggettoCopia che si desidera clonare
         public OggettoCopia clone(){
              return new OggettoCopia(this.parola, this.num);
         }
    
         public boolean (OggettoCopia obj){
              if(parola.equals(obj.getParola()) && num == obj.getNumber())
                   return true;
              else
                   return false;
         }
    }
    Spero di essere stao abbastanza chiaro. Se ci sono dubbi... posta pure
    Al mio segnale... scatenate l'inferno!

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12
    Eccomi stamane mi sono alzata ed ho rivisto il codice seguedo i vostri suggerimenti e vi ringrazio tantissimo per la disponibilità... R@ve M@ster ho fatto come mi hai suggerito tu cercando di capire passo passo i tuoi suggerimenti (qualcosa in piu la mia testa dura ha capito ),,,Mi dava un errore nel codice che ho cercato di risolvere l'errore era qui:

    codice:
       public boolean equals (OggettoCoppia obj) {
    
    	     if (parola.equals(obj.getParola()) && num == obj.getNumber())
    
    	     	return true;
    
    	     else
    
    	     	return false;
    
       }
    Quando lo mandavo in compilazione mi dava il seguente errore:

    codice:
    OggettoCoppia.java:85: getNumber(int) in OggettoCoppia cannot be applied to ()
    	     if (parola.equals(obj.getParola()) && num == obj.getNumber())
                                                                 ^
    1 error
    
    Procedura completata con codice di uscita 1

    Ho provato a capire con tutte le mie forze mentali dove era questo errore e come potevo risolverlo e l'ho risolto così (compilando ora non mi da alcun errore)

    codice:
       public boolean equals (OggettoCoppia obj) {
    
    	     if (parola.equals(obj.getParola()) && num == obj.getNumber(num))
    
    	     	return true;
    
    	     else
    
    	     	return false;
    
       }
    Ora mi metto a fare l'altra classe del compito se poi avrò bisogno e sarai così gentile da aiutarmi te ne sarei molto ma molto grata....

    Un grazie ad entrambi e un saluto grande

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    71
    Solo un piccolo dubbio, come hai definito il metodo getNumber?
    Se non ti da errori in questo modo
    [CODE]
    if (parola.equals(obj.getParola()) && num == obj.getNumber(num))
    [CODE]

    vuol dire che hai lasciato la tua vecchia definizione, ossia
    codice:
    public int getNumber (int num) {
    	return num;
    
    }
    In questo caso non ti ritonerebbe il valore di num associato alla tua istanza obj, ma il valore che tu passi quando chiami il metodo, e qundi non sarebbe corretto.
    Controlla nella segantura del metodo che non siano richiesti parametri.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12
    Sì avevi ragione ho letto male il testo dell'esercizio in quanto

    public int getNumber()

    non aveva alcun parametro num tra le parentesi....Quindi ho cambiato il codice in modo opportuno grazie mille ancora

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12
    Di nuovo ciao a tutti...scusate ancora...ho eseguito la seconda classe che mi hanno dato per compito è un esttensione della classe OggettoCoppia precedentemente inserita nel forum...
    Mi continua a dare errori anche questa classe qualcuno potrebbe aiutarmi...Riporto prima di tutto il codice con i vari commenti:

    codice:
    class ArrayDiOggetti {
    
    	private String[] arrayOggetti;
    
    	private int maxOggetti = 0;
    
    	// questo costruttore crea un ArrayDiOggetti che potrà contenere
    	// maxOggetti elementi della classe OggettoCoppia
    	// maxOggetti è il massimo numero di OggettoCoppia che potranno
    	// essere contenuti. Se maxOggetti è negativo allora deve essere
    	// creato un vettore per zero OggettoCoppia
    
    	public ArrayDiOggetti (int maxOggetti) {
    
    		if (maxOggetti < 0) {
    
    		   maxOggetti = 0;
    
    		   arrayOggetti = new String[maxOggetti];
    
    		}
    
    	}
    
    	// questo costruttore crea un ArrayDiOggetti partendo dal vettore
    	// array di OggettoCoppia. Array è il vettore di oggetti che verra
    	// inizialmete memorizzato. Se array è NULL allora deve essere creato
    	// un vettore per zero OggettoCoppia
    
    	public ArrayDiOggetti (OggettoCoppia[] array) {
    
    		if (array == null)
    
    		    arrayOggetti = new String[0];
    
    		else
    
    			arrayOggetti = array;  //???????
    
    	}
    
    	// questo metodo restituisce l'informazione sul massimo numero di
    	// OggettoCoppia che possiamo memorizzare.
    	// Returns: il massimo numero di OggettoCoppia memorizzabile
    
    	public int maxNumOggetti() {
    
    		return maxOggetti;
    
    	}
    
    	// questo metodo inserisce pair alla posizione pos nell'ArrayDiOggetti.
    	// Se la posizione non è valida non verra inserito nulla.
    	// pair = contiene l'OggettoCoppia da memorizzare
    	// pos = contiene la posizione ove inserire l'OggettoCoppia
    	// returns: false se pos è al di fuori del range, true altrimenti
    
    	public boolean insert (OggettoCoppia pair, int pos) {
    
    		if (pos < 0 | pos >= arrayOggetti.length)
    
    			return false;
    
    	arrayOggetti[pos] = pair;  //????
    
    	return true;
    
    	}
    	
    	// questo metodo restituisce l'OggettoCoppia memorizzato alla posizione
    	// pos. Se la posizione non è valida verra restituito NULL.
    	// pos = contiene la posizione dell'OggettoCoppia cui vogliamo accedere
    	// Returns: NULL se pos è al di fuori del range,
    	// l'OggettoCoppia memorizzato alla poszione pos altrimenti
    
    	public OggettoCoppia read (int pos) {
    
    		if (pos < 0 | pos >= arrayOggetti.length)
    
    			return null;
    
    		else
    
    			arrayOggetti = OggettoCoppia[pos];
    
    	}
    
    	// questo metodo restituisce l'OggettoCoppia memorizzato alla posizione
    	// pos, inoltre attua l'estrazione dell'OggettoCoppia inserendo NULL alla
    	// posizione pos. Se la posizione non è valida verra restituito NULL
    	// pos = contiene la posizione dell'OggettoCoppia cui vogliamo accedere, e
    	// dove inseriremo il valore NULL
    	// Returns: NULL se pos è al di fuori del range del vettore, l'OggettoCoppia
    	// memorizzato alla posizione pos altrimenti
    
    	public OggettoCoppia extract (int pos) {
    
    		String estratta = "";
    
    		if (pos < 0 | pos >= arrayOggetti.length)
    
    			return null;
    
    		else {
    
    			estratta = arrayOggetti[pos];
    
    		    return null;
    
    		}
    
    	}
    
    	// restituisce una stringa contenetne le informazioni sullo stato
    	// dell'ArrayDiOggetti.
    	// Returns: per ogni OggettoCoppia, viene inserita una linea di testo
    	// in ordine: 1) se l'OggettoCoppia in posizione i è NULL allora viene
    	// aggiunta una linea iniziante con il numero i e immediatamente
    	// conclusa con il carattere "a capo"; 2) se l'OggettoCoppia in
    	// posizione i è diverso da NULL allora viene aggiunta una linea
    	// iniziante con il numero i, seguita da uno spazio, seguita dalla
    	// stringa dell'OggettoCoppia, seguita da un altro spazio, seguita dal
    	// numero intero-positivo dell'OggettoCoppia, e conclusa con il
    	// carattere "a capo".
    
    	public String toString() {
    
    		String stringa = "";
    
    		for (int i = 0; i < arrayOggetti.length; i++) {
    
    			if (arrayOggetti[i] == null)
    
    				stringa = stringa + i + "\n";
    
    		//	else
    
    		//		stringa = stringa + i + " " + OggettoCoppia + " " + num + "\n";  //?????
    
    		}
    
    		return stringa;
    
    	}
    
    	// questo metodo confronta l'ArrayDiOggetti sui cui viene chiamato con
    	// altroVettore. AltroVettore = contiene l'ArrayDiOggetti con cui fare
    	// il confronto. Returns: true se i due ArrayDiOggetti confrontati
    	// possono contenere esattamente lo stesso numero di coppie, ed inoltre
    	// le coppie alle stesse posizioni contengono esattamente la stessa
    	// stringa e lo stesso numero intero-positivo. Altrimenti viene
    	// restituito false.
    
    	public boolean equals (ArrayDiOggetti altroVettore) {
    
    		if (arrayOggetti.equals(altroVettore))
    
    			return true;
    
    		else
    
    			return false;
    	}
    
    	// questo metodo confronta l'ArrayDiOggetti sui cui viene chiamato con
    	// altroVettore. altroVettore = contiene l'ArrayDiOggetti con cui fare
    	// il confronto. Returns: ture se i due ArrayDiOggetti confrontati
    	// possono contentere esattamente lo stesso numero di coppie, ed inoltre
    	// in ogni posizione i due ArrayDiOggetti contengono esattamente la
    	// stessa coppia (non solo gli stessi valori). Altrimenti viene
    	// restituito false
    
    	public boolean anotherEquals (ArrayDiOggetti altroVettore) {
    
    		if (arrayOggetti.equals(altroVettore))         // ma viene uguale all'altro cosa dimentico????
    
    			return true;
    
    		else
    
    			return false;
    
    	}
    
    	// duplica l'ArrayDiOggetti. Returns: una copia dell'ArrayDiOggetti,
    	// contentente un clone degli OggettoCoppia del oggetto su cui il metodo
    	// ha chiamato
    
    	public ArrayDiOggetti clone() {
    
    		return new ArrayDiOggetti (maxOggetti);
    	}
    }
    Gli errori che il compilatore mi da sono i seguenti...

    codice:
    ArrayDiOggetti.java:38: incompatible types
    found   : OggettoCoppia[]
    required: java.lang.String[]
    			arrayOggetti = array;  //???????
                                           ^
    ArrayDiOggetti.java:64: incompatible types
    found   : OggettoCoppia
    required: java.lang.String
    	arrayOggetti[pos] = pair;  //????
                                ^
    ArrayDiOggetti.java:84: cannot find symbol
    symbol  : variable OggettoCoppia
    location: class ArrayDiOggetti
    			arrayOggetti = OggettoCoppia[pos];
                                           ^
    3 errors
    
    Procedura completata con codice di uscita 1

    Non so più dove sbattere la testa oggi ma cosa sbaglio secondo me sbaglio il richiamo dell'oggetto dell'altra classe OggettoCoppia o no??? se sì come si fa???

    Grazie ancora

  8. #8
    Dunque... cominciamo con la definizione delle variabili e dei costruttori:

    codice:
    class ArrayDiOggetti {
                 //devi definire un array di OggettoCoppia e non di String come avevi fatto
    	private OggettoCoppia[] arrayOggetti;   
    
    	private int maxOggetti = 0;
    
    	// questo costruttore crea un ArrayDiOggetti che potrà contenere
    	// maxOggetti elementi della classe OggettoCoppia
    	// maxOggetti è il massimo numero di OggettoCoppia che potranno
    	// essere contenuti. Se maxOggetti è negativo allora deve essere
    	// creato un vettore per zero OggettoCoppia
    
    	public ArrayDiOggetti (int maxOggetti) {
    
    		if (maxOggetti < 0) {
    
    		   arrayOggetti = new OggettoCoppia[0];
    
    		}else{
                                    arrayOggetti = new OggettoCoppia[maxOggetti];
                              }
    
    	}
    
    	// questo costruttore crea un ArrayDiOggetti partendo dal vettore
    	// array di OggettoCoppia. Array è il vettore di oggetti che verra
    	// inizialmete memorizzato. Se array è NULL allora deve essere creato
    	// un vettore per zero OggettoCoppia
    
    	public ArrayDiOggetti (OggettoCoppia[] array) {
    
    		if (array == null)
    
    		    arrayOggetti = new OggettoCoppia[0];
    
    		else
                                  arrayOggetti = array.clone();    //clono l'array passato come parametro
    
    	}
    Ed ora i vari metodi... Il metodo maxNumOggetti è corretto quindi evito di riscriverlo

    Per quanto riguarda il metodo insert bisogna capire se inserendo un elemento in una certa posizione il vecchio elemento deve essere sostituito oppure gli elementi da quella posizione in poi devono essere traslati. Dato il tuo codice suppongo sia la prima ipotesi:

    codice:
    	// questo metodo inserisce pair alla posizione pos nell'ArrayDiOggetti.
    	// Se la posizione non è valida non verra inserito nulla.
    	// pair = contiene l'OggettoCoppia da memorizzare
    	// pos = contiene la posizione ove inserire l'OggettoCoppia
    	// returns: false se pos è al di fuori del range, true altrimenti
    
    	public boolean insert (OggettoCoppia pair, int pos) {
    
    		if (pos < 0 || pos >= arrayOggetti.length)    //da notare che per il confronto OR devi usare il doppio operatore || e non il singolo |
    
    			return false;
    
                              arrayOggetti[pos] = pair;
                              return true;
    
    	}
    	
    	// questo metodo restituisce l'OggettoCoppia memorizzato alla posizione
    	// pos. Se la posizione non è valida verra restituito NULL.
    	// pos = contiene la posizione dell'OggettoCoppia cui vogliamo accedere
    	// Returns: NULL se pos è al di fuori del range,
    	// l'OggettoCoppia memorizzato alla poszione pos altrimenti
    
    	public OggettoCoppia read (int pos) {
    
    		if (pos < 0 || pos >= arrayOggetti.length)
    
    			return null;
    
    		return arrayOggetti[pos];   // ritorni l'OggettoCoppia presente alla posizione pos
    
    	}
    
    	// questo metodo restituisce l'OggettoCoppia memorizzato alla posizione
    	// pos, inoltre attua l'estrazione dell'OggettoCoppia inserendo NULL alla
    	// posizione pos. Se la posizione non è valida verra restituito NULL
    	// pos = contiene la posizione dell'OggettoCoppia cui vogliamo accedere, e
    	// dove inseriremo il valore NULL
    	// Returns: NULL se pos è al di fuori del range del vettore, l'OggettoCoppia
    	// memorizzato alla posizione pos altrimenti
    
    	public OggettoCoppia extract (int pos) {
    
    		if (pos < 0 || pos >= arrayOggetti.length)
    			return null;
    
    
    		OggettoCoppia oggettoDaTornare = arrayOggetti[pos];
                              arrayOggetti[pos] = null;
    		 
                              return oggettoDaTornare;
    
    	}
    
    	// restituisce una stringa contenetne le informazioni sullo stato
    	// dell'ArrayDiOggetti.
    	// Returns: per ogni OggettoCoppia, viene inserita una linea di testo
    	// in ordine: 1) se l'OggettoCoppia in posizione i è NULL allora viene
    	// aggiunta una linea iniziante con il numero i e immediatamente
    	// conclusa con il carattere "a capo"; 2) se l'OggettoCoppia in
    	// posizione i è diverso da NULL allora viene aggiunta una linea
    	// iniziante con il numero i, seguita da uno spazio, seguita dalla
    	// stringa dell'OggettoCoppia, seguita da un altro spazio, seguita dal
    	// numero intero-positivo dell'OggettoCoppia, e conclusa con il
    	// carattere "a capo".
    
    	public String toString() {
    
    		String stringa = "";
    
    		for (int i = 0; i < arrayOggetti.length; i++) {
    
    			if (arrayOggetti[i] == null)
    
    				stringa = stringa + i + "\n";
    
    			else
                                                       //Devi richiamare i metodi getParola e getNumber dei vari OggettoCoppia
    				stringa = stringa + i + " " + arrayOggetti[i].getParola() + " " + arrayOggetti[i].getNumber() + "\n";  
    
    		}
    
    		return stringa;
    
    	}

    Per i due metodi equals e il clone sinceramente non ho capito cosa vuole... magari ci do uno sguardo appena ho la mente un pò più libera...
    Al mio segnale... scatenate l'inferno!

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12
    Rieccomi ieri non sono potuta venire, ringrazio tutti per l'attenzione e la pazienza che mi avete dimostrato

    cmq sono riuscita con ore e ore di ragionamento e seguendo passo passo il codice su di un foglio facendo lo stack e heap a capire bene i vari controlli dove mi portavano....grazie ancora a presto ciaoooo buona serata

  10. #10
    Scusatemi mi rendo contro che la discussione è ormai giunta al suo svolgimento ma volevo comunque intervenire per sottolineare un paio di cose:

    In JAVA, tutti gli oggetti creati sono figli di Object che offre una serie di metodi a disposizione.

    Object possiede quindi un insieme di metodi tra cui Equals, toString, e metodi che implementano l'interfaccia Cloneable quali Clone.


    Per clonare un oggetto (quindi farne una copia pura) si deve fare l'overriding (overo la sovrascrittura) di Clone di Object e non l'overload!

    Ragion per cui i implementa l'interfaccia cloneable e si aggiunge

    Object clone() {
    //contenuto
    }

    che restituirà un object.

    Da un eventuale classe cliente se vogliamo la copia di ad esempio l'Oggetto istanza della classe Parola, NON dobbiamo avere una classe OggettoCopia, ma semplicemente un overriding di Clone nella classe Parola

    Esempio

    OggettoClone c = b.clone();

    dove b contiene il riferimento ad un'altro oggetto OggettoCopia, questo è Sbagliato, per avere una copia, avresti dovuto fare:

    Parola p = (Parola)b.clone();

    dove b contiene un riferimento ad un oggetto Parola ed avrebbe restituito appunto la copia dell'oggetto di interesse.


    Passiamo poi ad Equals.

    Equals deve avere un Overriding NON un Overloading come mostrato qui ovvero:

    boolean equals(Object o){
    //redifinizione del metodo equals
    }

    in modo tale che, qualora avresti voluto confrontare due oggetti avresti potuto chiamare semplicemente il metodo equals passandogli un qualsiasi oggetto, all'interno del metodo stesso avresti usato il controllo sull'appartenenza alla classe con getClass() poi avresti usato un casto come Parola o1 = (Parola) o ed infine avresti confrontato le istanze

    Concettualmente, proprio l'esistenza di una classe OggettoCopia, non è appropriata

    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.