Casting da object a character

di il
7 risposte

Casting da object a character

Salve a tutti.
Devo progettare il gioco di Rogue per un esame di programmazione ad oggetti.
Praticamente il gioco consiste in un personaggio che si muove in una stanza ma non sa cosa troverà ad ogni suo movimento. Potrebbe trovare un mostro contro cui combattere, una pozione per riprendere vita ecc.
Ora dato che in ogni punto della stanza ci può essere qualsiasi cosa ho voluto definire la stanza come una matrice di celle dove una cella è composta da un booleano che dice se la cella è già stata visitata e un object che corrisponde a ciò che si trova in quella cella.
La mia domanda quindi è: visto che in java, per esempio la classe character, sta gerarchicamente sotto la classe object, come posso dire che un ipotetico object o = "-"(il carattere trattino)?
la mia domanda si riferisce non solo ai character ma a qualsiasi classe definita sotto object...

7 Risposte

  • Re: Casting da object a character

    Ciao, per il downcasting non è richiesto nulla di particolare..semplicemente crei un nuovo oggetto della sottoclasse e lo assegni a una variabile di una sua superclasse. Esempio:
    Object o = new Character("-");
    Viceversa per l'upcasting (ovvero l'operazione duale) ti servirà un casting esplicito. Esempio:
    
    Object o = new Character("-");
    Character c = (Character) o;
    
  • Re: Casting da object a character

    Ciao. Grazie per la risposta ma sei sicuro che sia così?
    Perché ho provato a farlo ma eclipse mi da un errore:
    "the constructor Character(String) is undefined"
    Anche se non capisco cosa c'entri con il casting...
  • Re: Casting da object a character

    Hai ragione, ho fatto un errore io!
    I doppi apici, ovvero il carattere ", serve per identificare le stringhe, mentre per i char serve l'apice singolo, ovvero '.
    Detto questo il codice diventa:
    Object o = new Character('-');
  • Re: Casting da object a character

    Ah grazie mille!
    Però c'è ancora qualcosa che mi sfugge perchè continua a non funzionare!
    Ti posto il mio codice.

    Questo è la classe Cella
    
    public class Cella {
    	 
    	public Object o;
    	public boolean visitato;
    	
    	public Cella() {
    		o = new Object();
    		visitato = false;
    	}
    	
    }
    
    questa è la classe amministratore da cui crea la stanza(cioè la matrice di celle)
    
    public class Amministratore {
    
    	private static final int RIGHE = 10;
    	private static final int COLONNE = 15;
    	private Cella[][] stanza;
    	
    	public void creaStanza() {
    		stanza = new Cella[RIGHE][COLONNE];
    		for(int i=0;i<RIGHE;i++){
    			for(int n=0;n<COLONNE;i++){
    				if(i==0 || i==RIGHE-1) {
    					stanza[i][n].o = new Character('-');  //riga dell'errore
    					stanza[i][n].visitato = true;
    				}
    				if(n==0 || n==COLONNE-1){
    					stanza[i][n].o = new Character('|');
    					stanza[i][n].visitato = true;
    				}
    				if(i!=0 && i!=RIGHE-1 && n!=0 && n!= COLONNE-1){
    					stanza[i][n].o = new Character('.');
    				}
    			}
    		}
    	}
    }
    
    dalla classe eseguibile richiamo la funzione creaStanza ma mi da questo errore:
    Exception in thread "main" java.lang.NullPointerException
    at game.Amministratore.creaStanza(Amministratore.java:15)

    Forse sbaglio dove faccio la new della matrice di celle?
    
    stanza = new Cella[RIGHE][COLONNE];
    
    Ah non fare caso al perchè voglio mettere il - e il | ai limiti della matrice... è solo per poter poi stampare sulla console il muro della stanza.
  • Re: Casting da object a character

    Il problema è che quando crei la matrice non vengono creati anche gli oggetti al suo interno, ma li devi creare tu manualmente.
    Cioè in pratica nel momento in cui tu fai
    stanza = new Cella[RIGHE][COLONNE];
    ti viene creata una matrice 10 X 15 vuota (cioè ogni elemento sarà "null"), e sarai tu a doverti preoccupare di riempirla. Di conseguenza dovresti modificare i cicli for innestati in modo da creare per prima cosa gli oggetti, e poi fare le opportune modifiche al loro interno.
    
    for(int i=0;i<RIGHE;i++){
             for(int n=0;n<COLONNE;i++){
                stanza[i][n] = new Cella();
                ecc ....
    
  • Re: Casting da object a character

    Ok perfetto! Credevo bastasse fare la new della matrice per inizializzare igni oggetto all'interno di essa. Grazie per l'aiuto!!
  • Re: Casting da object a character

    In realtà la matrice viene inizializzata al valore di default del tipo di cui è composta la matrice. Quindi ad esempio una matrice di interi verrà inizializzata a zero, una matrice di boolean a false e così via. Il valore di default degli oggetti è null, quindi la matrice viene inizializzata a null
Devi accedere o registrarti per scrivere nel forum
7 risposte