Estrarre da una lista e stampare

di il
10 risposte

Estrarre da una lista e stampare

Salve, devo fare un programma che pescando tot carte le ordini in base al gioco di briscola o scopa.
Ho creato un List contenete le carte ordinare secondo i parametri, ora però ho un problema.
Come faccio nel main ad estrarre questi elementi e successivamente stamparli?
  public static void main(String[] args) {
       
       
       Mazzo m = new Mazzo();
       Giocatore giocatore = new Giocatore(Integer.parseInt(JOptionPane.showInputDialog("Quante carte vuoi?")),m);
       int risp=Integer.parseInt(JOptionPane.showInputDialog("1.Ordina briscola   2.Ordina scopa"));
       switch(risp){
           case 1:
               Briscola b = new Briscola();
               
       
             
              
               break;
           case 2:
               Scopone s = new Scopone();
               
               break;
       }
       
    }
Questo è il main nello switch per scegliere tra le due opzioni, nella scrittura del comando vorrei richiamare l'oggetto giocatore prendere l'array al suo interno e stamparlo. Ho provato con un sort ma mi segnalava errori, poi ho provato con il Toarray ma non so come usarli. Qualcuno mi può aiutare?

10 Risposte

  • Re: Estrarre da una lista e stampare

    Vorrei vedere le strutture interne delle classi che usi qui
  • Re: Estrarre da una lista e stampare

    Ok,
    Classe Carta:
    
    package gioco2;
    
    
    
    public class Carta {
    public  String seme;    
    public int valore;
    
    public Carta(String seme,int valore){
    this.seme=seme;
    this.valore=valore;
    };
    
    }
    
    Classe Mazzo:
    package gioco2;
    import java.util.*;
    
    public class Mazzo {
      public List mazzo; // inizializzo il mazzo;
      
      public Mazzo(){ // creo un set mazzo, costruttore
      this.mazzo=  new ArrayList();
      for(int i=1;i<11;i++){
          Carta c1= new Carta("Bastoni",i);
          mazzo.add(c1);
          Carta c2= new Carta("Spade",i);
          mazzo.add(c2);
          Carta c3= new Carta("Coppe",i);
          mazzo.add(c3);
          Carta c4= new Carta("Danari",i);
          mazzo.add(c4);
       }
      }
      public Carta estraimazzo(){ //estraggo carta casuale dal mazzo
      Iterator x = mazzo.iterator();
      Object tmp=x.next();
      mazzo.remove(tmp);
      Carta res=(Carta)tmp;
      
      return res;
      }
    }
    Classe briscola:
    package gioco2;
    
    import java.util.Comparator;
    
    /**
     *
     * @author FinallyDou
     */
    public class Briscola implements Comparator<Carta> {
    
        @Override
        public int compare(Carta o1, Carta o2) { //ordina prima per numero poi per seme
        int res=0;
        if(o1.valore<o2.valore) res=-1;
        else if(o1.valore==o2.valore){
             int x=o1.seme.compareTo(o2.seme);
             if(x<0) res=-1;
             else if(x==0) res=0;
             else res=1;
        }
        else res=1;
        return res;
        
        }
        
    }
    Classe scopone:
    
    package gioco2;
    
    import java.util.Comparator;
    
    /**
     *
     * @author FinallyDou
     */
    public class Scopone implements Comparator <Carta> {
    
        @Override
        public int compare(Carta o1, Carta o2) {  //ordina prima per seme poi per numero
           int res=0;
            int x=o1.seme.compareTo(o2.seme);
            if(x<0) res=-1;
            else if(x==0)
                if(o1.valore==o2.valore) res=0;
                else if(o1.valore<o2.valore) res=-1;
            else
                    res=1;
        return res;    
        }
        }
    Classe Giocatore:
    package gioco2;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class Giocatore {
    List g;
    public Giocatore(int numerocarte, Mazzo mazzo){  //sceglie quante carte vuole e le estrae
    g= new ArrayList();
    for(int i=0;i<numerocarte;i++){
    Carta tmp =mazzo.estraimazzo(); //estrae dal mazzo quante volte hai scelto di pescare
    g.add(tmp);
    }
    }
    }
    Nel main posso usare un iteratore che girando nella lista mi stampi i valori, però provando mi stampa delle cose strane e non il valore della carta
  • Re: Estrarre da una lista e stampare

    JavaAddicted ha scritto:


    Nel main posso usare un iteratore che girando nella lista mi stampi i valori, però provando mi stampa delle cose strane
    Quelle cose che tu reputi "strane" sono semplicemente il risultato del toString() di Object, che Carta "eredita".
    Ridefinisci il toString() in Carta.
  • Re: Estrarre da una lista e stampare

    Scusa la mia ignoranza ma non ho capito cosa devo fare, sono alle prime armi in java
  • Re: Estrarre da una lista e stampare

    JavaAddicted ha scritto:


    Scusa la mia ignoranza ma non ho capito cosa devo fare, sono alle prime armi in java
    Se fai es.

    System.out.println(unaCarta);

    ottieni quella forma perché è il risultato del toString() implementato in Object.
    Il toString() ha la seguente signature

    public String toString()

    In Carta definisci un metodo esattamente così, in modo che faccia un "override" di quello in Object. Fai restituire una stringa descrittiva della carta, componendola come vuoi tu.


    P.S. Affronta prima possibile i concetti basilari di Java ... overload, override, ecc...
  • Re: Estrarre da una lista e stampare

    public String toString()

    In Carta definisci un metodo esattamente così, in modo che faccia un "override" di quello in Object. Fai restituire una stringa descrittiva della carta, componendola come vuoi tu.
    Sono ore che ci sto dietro e non riesco a venirne a capo.
    Io sullo switch ho :
    Briscola b = new Briscola();
                   Iterator x = giocatore.g.iterator();
                   Object t = x.next();
                   giocatore.g.remove(t);
                   System.out.println("t:"+t);
    Sul print mi stampa l'indirizzo, creando un metodo toString() su carta non saprei proprio come modificarlo
    @Override
    public String ToString(){}
  • Re: Estrarre da una lista e stampare

    JavaAddicted ha scritto:


    Sul print mi stampa l'indirizzo, creando un metodo ToString() su carta non saprei proprio come modificarlo
    @Override
    public String ToString(){}
    In Java (come in altri linguaggi) i nomi sono importanti. toString ... non ToString o TOString o altro.

    Poi comunque il metodo è vuoto (non dovrebbe nemmeno compilarti se è vuoto). Devi comporre tu una stringa con una descrizione della carta, inserendo i campi che hai a disposizione. E poi restituire questa stringa.
  • Re: Estrarre da una lista e stampare

    Risolto grazie mille
  • Re: Estrarre da una lista e stampare

    Per l'estrazione casuale ho scritto questo codice
     
    int x = (int)(Math.random()*mazzo.size());
     Object tmp=x;
     mazzo.remove(tmp);
     Carta res=(Carta)tmp;
    return res;
    Però nel compilarlo mi da errore, sai il perchè?
  • Re: Estrarre da una lista e stampare

    JavaAddicted ha scritto:


    Per l'estrazione casuale ho scritto questo codice
     
    int x = (int)(Math.random()*mazzo.size());
     Object tmp=x;
     mazzo.remove(tmp);
     Carta res=(Carta)tmp;
    return res;
    Però nel compilarlo mi da errore, sai il perchè?
    Innanzitutto rimuovere un elemento in posizione "casuale" ha più senso se hai una lista ... non un set. Con un set tecnicamente si può anche fare ma dovresti iterare sul set finché trovi l'elemento nella posizione x.

    Anche supponendo che quel mazzo sia un List, il tuo codice NON ha senso. Cerchi di rimuovere un oggetto che è un Integer con il valore x. Ovviamente la lista ha oggetti Carta .... non oggetti Integer ! E poi cerchi pure di far "vedere" un oggetto Integer come un oggetto Carta (questo fallisce comunque a runtime).

    Le liste hanno un remove(int index). Tu gli passi l'indice (casuale nel tuo caso), il remove rimuove l'oggetto a quel indice e ti restituisce, nota bene, l'oggetto che ha rimosso.
Devi accedere o registrarti per scrivere nel forum
10 risposte