Problema in un esercizio java

di il
2 risposte

Problema in un esercizio java

Dopo quasi due mesi decido di riprendere in mano java scrostando un po di ruggine quando incappo improvvisamente in un problema.
L'esercizio consisteva in un banale lancio di dadi ma quando avvio il programma mi da sempre 0 come risultato e mi chiedevo se mi potevate dare una mano a risolvere il tutto
Classe uomo:

import java.io.*;
import java.util.*;
public class Uomo
{
protected String nome;
protected String lavoro;
protected int stipendio;

public Uomo()
{
this.nome=null;
this.lavoro=null;
this.stipendio=0;
}
public Uomo(String nome,String lavoro,int stipendio)
{
this.nome=nome;
this.lavoro=lavoro;
this.stipendio=stipendio;
}
public String getNome() {
return nome;
}
public String getLavoro() {

return lavoro;
}
public int getStipendio() {

return stipendio;
}

public String Tutto()// facoltativo
{
return nome+","+lavoro+","+stipendio;
}
}

classe giocatore:
public class Giocatore extends Uomo
{
private Dado Dado_1;
private Dado Dado_2;
private int punteggio;
private String NomeManager;
public Giocatore (String nome,String lavoro,int stipendio,String NomeManager)
{
super(nome,lavoro,stipendio);
this.NomeManager=NomeManager;
Dado_1=new Dado(6);
Dado_2=new Dado(6);
}

public void tira()
{
Dado_1.lancia();
Dado_2.lancia();
punteggio=Dado_1.getfaccia()+Dado_2.getfaccia();
}
public String Tutto()// facoltativo
{
return nome+","+lavoro+","+stipendio+","+NomeManager+","+punteggio;
}
}
Classe dado:

import java.util.Random;


public class Dado {

private int faccia ;

public Dado(int quale)
{
faccia=6;
caso=new Random();
}

public Dado(int quale,int limite)
{
caso=new Random();
faccia=quale;
if(faccia>limite)
faccia=limite;


}
public int getfaccia()
{
return faccia;

}

private Random caso=new Random();
public void lancia ()
{
faccia=caso.nextInt(6)+1;
}
}

Classe main:

public static void main(String[] args)
{
Uomo t1=new Uomo();
Uomo t2=new Uomo("renzo","architetto",1000);
Giocatore a1=new Giocatore("AM","nessuno",0,"Samantha");
System.out.println(t1.Tutto());
System.out.println(t2.Tutto());
System.out.println(a1.Tutto());

}

}

VI ringrazio in anticipo per il disturbo

2 Risposte

  • Re: Problema in un esercizio java

    Dove ti da 0?
  • Re: Problema in un esercizio java

    Devi far tirare i dadi al giocatore altrimenti il punteggio non viene mai modificato:
    
    public static void main(String[] args) {
            Uomo t1 = new Uomo();
            Uomo t2 = new Uomo("renzo", "architetto", 1000);
            Giocatore a1 = new Giocatore("AM", "nessuno", 0, "Samantha");
            a1.tira(); // <------ QUI
    
            System.out.println(t1.Tutto());
            System.out.println(t2.Tutto());
            System.out.println(a1.Tutto());
        }
    
    Comunque ci sono diverse cose che non vanno nel tuo codice:
    1) i metodi e le variabili devono sempre iniziare con un carattere minuscolo
    2) il metodo Tutto(), ovvero il metodo che trasforma il tuo oggetto in una stringa, è gia presente in ogni oggetto, si chiama toString e viene ereditato da Object. Devi solo ridefinirlo.
    Es:
    
    @Override
    public String toString(){
            return nome + "," + lavoro + "," + stipendio + "," + NomeManager + "," + punteggio;
    }
    
    Inoltre ti offre anche dei vantaggi: ad esempio se passi al println() un oggetto che ha ridefinito il toString, il println() stampa direttamente il risultato del toString anche se tu non lo invochi espicitamente.
    Ovvero println(a1) equivale a println(a1.toString()).
    3)Non usare mai numeri magici:
    in Giocatore.java
    
    Dado_1 = new Dado(6);
    

    quel 6 da dove salta fuori? che cos'è? che significa? In questo caso è banale capire che è il numero di facce del dado ma immagina di leggere il codice di un programma un "po'" più corposo scritto da qualcun altro in cui trovi numeri sparsi per il codice... non è piacevole.
    Nel tuo caso se il numero di facce è costante allora è meglio definire una costante:
    
    in Giocatore:
    private final int NUM_FACCE_DADO = 6;
    e al costruttore del Dado passi:
    Dado dado1 = new Dado(NUM_FACCE_DADO);
    

    4) usa sempre nomi di variabili significativi: ad esempio nel costruttore del Dado "quale" non vuol dire un granchè; riceve il numero delle fracce del dado, quindi perchè non chiamarlo numFacce o qualcosa del genere?
    5)
    
    public Dado(int quale) {
            faccia = 6;
            caso = new Random();
        }
    

    passi al costruttore il numero di facce (quale), ma poi lo ignori e assegni un valore scelto da te
Devi accedere o registrarti per scrivere nel forum
2 risposte