Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [java]gioco dell'oca

  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]gioco dell'oca

    Ciao sto cercando di fare un programma che simuli il gioco dell'oca...ho una superclasse Casella(abstract) poi le sottoclassi CasellaStandard (extends Casella),CasellaRaddoppia (extends Casella), CasellaTornaAllaPartenza(extends Casella),Giocatore e Tabellone...il problema è nel costruttote della classe Tabellone:
    Rappresenta un tabellone di gioco, cio`e una sequenza di Caselle. Deve disporre dei seguenti costruttori e metodi
    pubblici oltre ad eventuali altri metodi che riterrete opportuni.
    -Tabellone(int dim)
    Costruttore che accetta un int per il numero di caselle. Solleva un’eccezione se dim `e minore di 50 o
    maggiore di 100. Predispone un tabellone di caselle tutte standard tranne quelle a un quarto, a met`a e a
    tre quarti che sono CasellaTornaAllaPartenza.La prima e l’ultima devono essere Standard.
    La mia soluzione è:

    codice:
    import java.util.*;
    class Tabellone{
        int dim;
    Casella[] caselle;
    CasellaTornaAllaPartenza h;
    Tabellone(int dim){
        if(dim<50 ||dim>100){
            throw new RuntimeException("dimensione sbagliata");
        }
        caselle=new Casella[dim];
        for(int pos=0;pos<dim;pos++){
            if(pos==(int)dim/4 &&pos==(int)dim/2 &&pos==(int)(dim*3)/4 ){
                caselle[pos]=h;
            }
        }
    }
    public void aggiungicasella(Casella c){
        for(int pos=0;pos<dim;pos++){
            caselle[pos]=c;  
    }
    }
    public String toString(){
        return ""+caselle;
    }
    }
    Secondo voi è giusta?O meglio è corretto non usare un arrayList?Come posso dire al mio array che in quella posizione va un oggetto di una sottoclasse?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ciao!

    Ci sono un po' di errori intanto :

    Quote Originariamente inviata da el92 Visualizza il messaggio
    codice:
    if(pos==(int)dim/4 &&pos==(int)dim/2 &&pos==(int)(dim*3)/4 )
    {
                caselle[pos]=h;
     }
    Non ti entrerà mai qui dentro se hai messo l' operatore logico && (a meno che dim=0 o 1) immagino tu indendessi scrivere || .

    Poi attenzione a cosa fai qui:

    Quote Originariamente inviata da el92 Visualizza il messaggio
    codice:
                caselle[pos]=h;
    Questa istruzione non costruisce una Casella di tipo CasellaTornaAllaPartenza , stai solo assegnando l'ultima casella che trovi di quel tipo a un campo della classe Tabellone (quindi nel tuo caso la casella a tre quarti del tabellone).
    Mentre tu vuoi creare una casella di tipo diverso a seconda della posizione, quindi dovresti fare qualcosa del tipo:

    codice:
    for(int pos=0;pos<dim;pos++)
            {
                if(pos==0||pos==dim-1) caselle[pos]=new CasellaStandard(/* Paramerti */);
                else if(pos==(int)dim/4||pos==(int)dim/2||pos==(int)(dim*3)/4)caselle[pos]=new CasellaTornaAllaPartenza(/* Parametri */);        
                else caselle[pos]=new Casella(/* Parametri */);
            }
    Se CasellaTornaAllaPartenza l'hai specificata come sotto classe di Casella non dovresti avere problemi con questa istruzione.

    Quote Originariamente inviata da el92 Visualizza il messaggio
    O meglio è corretto non usare un arrayList?
    Se il tuo Tabellone ha dimensione fissa, una volta creato, non vedo il motivo di usare un ArrayList...
    Ultima modifica di Ansharja; 26-06-2015 a 11:57 Motivo: Inesattezze :)

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    O meglio è corretto non usare un arrayList?
    Se il numero di caselle deve restare fisso, sì, va bene. Non è certo un aspetto negativo.

    Quote Originariamente inviata da el92 Visualizza il messaggio
    Come posso dire al mio array che in quella posizione va un oggetto di una sottoclasse?
    È già così, nel senso che in un array Casella[] puoi inserire qualunque oggetto che deriva da Casella. La questione è un'altra: se tiri fuori un oggetto dall'array lo "vedi" solo con il tipo statico Casella. Se vuoi sapere/avere il tipo esatto, puoi usare instanceof e poi un cast ma il punto è: hai bisogno proprio di questo o puoi fare invocazioni "polimorfiche"? Dipende da cosa fanno quelle caselle .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.