Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]torre con blocchi colorati e blocchi jolly

    Ciao devo creare una torre che contiene blocchi colorati e blocchi jolly(aventi rispettivamente un numero ed un colore) dello stesso colore ma contenti numeri diversi:
    Il problema è la classe Torre:

    codice:
    import java.util.*;
    class Torre{
        String nome;
        ArrayList<Blocco> blocchi;
    
        Torre(String nome){
            this.nome=nome;
            blocchi=new ArrayList<Blocco>();
        }
    /**    addBlocco(Blocco b)
    Pone in cima alla torre il blocco b se questo è possibile, cioè se sono rispettati 
    i vincoli 1, 2 e 3.*/
    public void addBlocco(Blocco b){
        
            if(b instanceof BloccoColorato){
                verificabloccolorato(b);
                
                
                }else if(b instanceof BloccoJolly){
                    verificabloccjolly(b);
    
            }
    }
    
    public void verificabloccolorato(Blocco b){
        BloccoColorato i=(BloccoColorato)b;
        BloccoColorato h=new BloccoColorato(i.numero,i.colore);
        Blocco c;
        c=i;
                if(h.puoStareSopraA(c)&&h.numero!=c.numero){    
                    blocchi.add(h);    
            }
    }    
    public void verificabloccjolly(Blocco b){
        BloccoJolly i=(BloccoJolly)b;
        BloccoJolly h=new BloccoJolly(i.numero);
        Blocco c;
        c=h;
        //se hanno lo stesso colore ma numeri diversi,allora aggiungo all'ArrayList
                if(h.puoStareSopraA(c)&&h.numero!=c .numero ){
                blocchi.add(h);    
        }
    }    
    
        public int numColorati(){
            int count=0;
            for(Blocco b:blocchi){
                if(b instanceof BloccoColorato){
                    count++;
                }
            }
            return count;
        }
        public int numJolly(){
            int count=0;
            for(Blocco b:blocchi){
                if(b instanceof BloccoJolly){
                    count++;
                }
            }
            return count;
        }
        /**Restituisce true se la torre contiene un blocco il cui numero e uguale al 
         numero del blocco b , false altrimenti*/
        public boolean containsBlocco(Blocco b){
            boolean bx=false;
            for(Blocco u:blocchi){
                if(u instanceof BloccoColorato || u instanceof BloccoJolly){
                if( u.numero==b.numero ){
                        bx=true;
                }
            }
            
        }
        return bx;
    }
    public String toString(){
        return ""+blocchi;
    }
    public static void main(String[] args){
    
        BloccoColorato g=new BloccoColorato(9,"verde");
        BloccoColorato gx=new BloccoColorato(8,"verde");
        BloccoColorato gt=new BloccoColorato(10,"arancione");
        BloccoColorato gg=new BloccoColorato(11,"grigio");
        BloccoColorato gu=new BloccoColorato(17,"arancione");
        BloccoColorato gi=new BloccoColorato(19,"marrone");
        Torre t=new Torre("fff");
        t.addBlocco(g);
        t.addBlocco(gx);
        t.addBlocco(gt);
        t.addBlocco(gu);
        t.addBlocco(gg);
        t.addBlocco(gi);
        System.out.println(t);
     }
    }
    In pratica la mia classe non aggiunge all'arrayList nessun Blocco...È come se non riconoscesse alcun Blocco...Perche?Dov'è che sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ciao ,in attesa che un utente più preparato di me ti risponda provo a darti qualche consiglio.

    Intanto posta il codice di tutte le classi che usi, altrimenti chi come me si era incuriosito e voleva compilare tutto per vedere cosa non funziona, deve crearsi le classi Blocco,BloccoColorato e BloccoJolly con i costruttori e metodi fatti da te .

    Poi uno strumento efficace per capire dove il programma non fa ciò che vorresti è stampare a video dei messaggi nei punti cruciali: ad esempio io stamperei a video il numero del Blocco b che passi al metodo addBlocco(Blocco b) con la semplice riga:

    codice:
    System.out.print("\nSto tentando di aggiungere il blocco con numero "+b.numero);
    Quando lo eseguo a me dice sempre che il numero del Blocco b è 0, mentre tu nel main provi ad aggiungere dei BloccoColorato con numero diverso da 0, forse questo può essere uno dei problemi (a meno che tu non abbia costruito in modo diverso i Blocco e BloccoColorato, ripeto posta il codice di quelle classi).

    Infine io, non sapendo come hai scritto il metodo puoStareSopraA(Blocco b) ho provato a restituire sempre true in quel metodo,
    in questo modo mi aggiunge all' ArrayList blocchi tutti e 6 i BlocchiColorati, ma con le informazioni sbagliate (tutti i numeri a 0).

    Quindi per concludere prova a capire perchè passando da BloccoColorato a Blocco nel metodo perdi le informazioni del BloccoColorato, e stampa qualche messaggio per capire se i parametri sono quelli che ti aspetti, e magari perchè puoStareSopraA(Blocco b) ti restituisce false quando vorresti che restituisse true .

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.