Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Java] sovrascrivere metodo toString()

    Salve ragazzi, ho una classe che ha 3 variabili esemplare e devo sovrascrivere il metodo toString.
    le tre variabili di esemplare sono una Stringa, un double e un array di stringhe. Il problema è proprio su quest'ultimo di cui esce stampato male.
    Mi sapete dire perche non funziona?

    codice:
    public String toString() {
    		return getClass().getName() + "[nome="+nome + ", " + "altezza="+altezza + ", " + "cibiPreferiti="+cibiPreferiti.toString() + "]";
    	}
    Questa è tutta la classe per completezza ve la metto:
    codice:
    import java.util.Arrays;
    
    public class Persona {
    	private String nome;
    	private double altezza;
    	private String[] cibiPreferiti;
    
    	public Persona(String nome, double altezza, String[] cibiPreferiti) {
    		this.nome = nome;
    		this.altezza = altezza;
    		this.cibiPreferiti = cibiPreferiti;
    	}
    
    	public String getNome() {
    		return nome;
    	}
    
    	public double getAltezza() {
    		return altezza;
    	}
    	
    	public String[] getCibiPreferiti() {
    		return cibiPreferiti;
    	}
    
    	/* Sovrascrive metodo toString() della superclasse universale Object */
    	public String toString() {
    		return getClass().getName() + "[nome="+nome + ", " + "altezza="+altezza + ", " + "cibiPreferiti="+cibiPreferiti.toString() + "]";
    	}
    	
    	/* Sovrascrive il metodo euals() della superclasse universale Object */
    	public boolean equals(Object otherObject) {
    		if(otherObject == null) return false;
    		if(getClass() != otherObject.getClass()) return false;
    		
    		Persona p = (Persona)otherObject; //cast
    		String[]pCp = p.getCibiPreferiti();
    		if( nome.equals( p.getNome() ) && altezza == p.getAltezza() ) {
    			for(int i=0 ; i<cibiPreferiti.length ; i++) {
    				if( !( cibiPreferiti[i].equals(pCp[i]) ) ) return false;
    			}
    			return true;
    		}
    		else return false;
    	}
    	
    	/* Sovrascrive metodo clone() della supeclasse Object */
    	public Object clone() {
    		String n = new String(nome); 										//copio il campo nome...
    		double a = altezza;				 									//... il campo altezza...
    		String[] cP = Arrays.copyOf(cibiPreferiti, cibiPreferiti.length); 	//...il campo cibiPreferiti che è un array ed uso, per copiarlo, il metodo appropriato
    		
    		Persona clone = new Persona(n, a, cP); 								//utilizzo il costruttore di Persona, per creare un clone
    		return clone;
    	}
    }

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Il problema è proprio su quest'ultimo di cui esce stampato male.
    Cosa significa questo? Sei in grado di spiegare qual'è il problema?

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non puoi "stampare" un array direttamente: devi interare ogni elemento e aggiungerlo ad una stringa singolarmente.

    edit: in alternativa potresti provare ad usare Arrays.toString()
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Originariamente inviato da Alex'87
    Non puoi "stampare" un array direttamente: devi interare ogni elemento e aggiungerlo ad una stringa singolarmente.

    edit: in alternativa potresti provare ad usare Arrays.toString()
    Non si capisce neanche che errore ottiene in output e nemmeno cosa vorrebbe ottenere (in che formato)...

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Scara95
    Non si capisce neanche che errore ottiene in output e nemmeno cosa vorrebbe ottenere (in che formato)...
    codice:
    public String toString() {
        return getClass().getName() 
            + "[nome="
            + nome 
            + ", " 
            + "altezza="
            + altezza 
            + ", " 
            + "cibiPreferiti="
            + cibiPreferiti.toString()
            + "]";
    }
    
    private String[] cibiPreferiti;
    cibiPreferiti è un array. Chiamare cibiPreferiti.toString() stamperà una cosa del tipo @String[]a34sda2 (più o meno). Immagino che lui invece voglia una stringa con il contenuto dell'array

    edit: comunque Java avrebbe una sua sezione dedicata
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    codice:
    public String toString() 
    {
        String result=getName()+"[nome="+nome + ", " + "altezza="+altezza;
        for(int i=0;i<cibiPreferiti.length;i++)
            result+=cibiPreferiti[i];
        return result;
    }

  7. #7
    Perfetto ragazzi vi ringrazio tutti e scusate se ho postato qui invece che nella sezione giusta, farò piu attenzione!
    Comunque ho corretto il codice come da suggerimento vostro ed ora funziona bene
    codice:
    public String toString() {
    		String result = 
    			  getClass().getName()
    			+ "["
    			+ "nome=" + nome
    			+ ", "
    			+ "altezza=" + altezza
    			+ ", "
    			+ "cibiPreferiti=";
    		for(int i=0 ; i<cibiPreferiti.length ; i++) {
    			result = result + cibiPreferiti[i];
    			if(i < cibiPreferiti.length - 1) result = result+", ";
    		}
    		return result+"]";
    	}
    Alex87 potresti precisare meglio quello che dici? che significa che potrei usare Arrays.toString() ?

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da VYCanisMajoris
    Alex87 potresti precisare meglio quello che dici? che significa che potrei usare Arrays.toString() ?
    Se hai il seguente array

    codice:
    String[] myArray = new String[] { "hello", "world", "!" };
    puoi stamparlo "velocemente" facendo

    codice:
    System.out.println(Arrays.toString(myArray));
    Sulla console apparirà ciascun elemento, separato dalla virgola, il tutto tra parentesi quadre:

    codice:
    [hello, world, !]
    Se non hai esigenze particolari di formattazione, può bastare
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Assolutamente va bene cosi, nessun esigenza particolare, che stupido è proprio come Arrays.copyOf(tipo[] arrayOriginale, int newLength);
    Solo un ultimo dubbio, questi sono metodi statici vero??

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Si sono metodi static
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2025 vBulletin Solutions, Inc. All rights reserved.