Domanda Risolto Problema con java

Stato
Discussione chiusa ad ulteriori risposte.

MRPants

Helper
4 Gennaio 2015
289
34
259
269
Ma se io volessi fare un applicazione che mi fa lanciare 2 dadi, e per delle specifiche cifre, ad esempio 3-6-11 la cifra puntata raddoppia o triplica , come dovrei fare oltre a istanziare le variabili ,utilizzare random math?


So che chiedete il codice ma non capisco come istanziare la variabile "conto totale" che è quella poi che viene estratta la puntata da triplicare o annullare in caso di perdita.

Spero di essermi spiegato decentemente, grazie
 
Non sono sicuro di aver capito cosa stai chiedendo. Una roba del genere?

Java:
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;

public class Bet {
    public static Set<Integer> lucky = Set.of(3, 6, 11);

    public static int throwDice() {
        return ThreadLocalRandom.current().nextInt(1, 7); // [1, 7)
    }

    public static void main(String[] args) {
        if (args.length != 1) {
            System.out.println("Usage: java Bet [money]");
            System.exit(1);
        }

        double bet = 0;
        try {
            bet = Double.parseDouble(args[0]);
        } catch (NumberFormatException e) {
            System.out.println("Bad value: you must insert a floating point value");
            System.exit(1);
        }

        int score = throwDice() + throwDice(); // throw two dices
        double multiplier = lucky.contains(score) ? 2 : 0;
        double win = bet * multiplier;
        System.out.println("Your bet is " + bet + "$ and you win " + win + "$");
    }
}
 
più o meno una cosa cosi


Java:
package modulo4;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Lancio_dadi_casa {

    public static void main(String[] args) {       
        JTextArea outputArea = new JTextArea();
        int budget = 100;
        String puntata, dadolanciato;
        puntata =  new JTextArea();
        int valPuntata, valdadolanciato, risultato;
        int numeroLanci = 7;
        int dado;
       
        for(int i=1; i<numeroLanci; i++) {
            dado =(1+(int)(Math.random()*12)); //12 PERCHè I DADI SONO 2 E A NOI INTERESSA LA SOMMA
            System.out.println(dado);
        }
        if (dado == 2,12) {
            System.out.println("hai vinto 4 volte la somma puntata");
            risultato = puntata *(4);
            budget = budget - risultato;
 
Ultima modifica:
E la domanda sarebbe questa?
So che chiedete il codice ma non capisco come istanziare la variabile "conto totale" che è quella poi che viene estratta la puntata da triplicare o annullare in caso di perdita.
Continuo a non capire, non vedo conto totale nel tuo codice.

Comunque se vuoi controllare se dato vale 2 oppure 12 devi utilizzare l'operatore logico OR, così:
Java:
if (dado == 2 || dado == 12) {
    // do something
}

Prenditi 5-10 minuti per esporre bene il problema e i tuoi dubbi a riguardo.

dado =(1+(int)(Math.random()*12)); //12 PERCHè I DADI SONO 2 E A NOI INTERESSA LA SOMMA
Da un punto di vista probabilistico, lanciare due dadi a 6 faccie non è come lanciare un dado a 12 facce. Ad esempio, in un dado a 12 facce può uscire 1 mentre lanciando due dadi a 6 facce l'1 non potrà mai uscire. Non è solo l'1 il problema, è proprio una cosa completamente diversa.
Se vuoi posso spiegartelo da un punto di vista matematico, ma non so quanto ti possa interessare.
 
  • Love
Reazioni: MRPants
Ultima modifica:
mi interessa,ho pensato io logicamente visto che a me interessa estrapolare dei numeri dal risultati per tradurli in azione,ad esempio se esce 2 o 11 raddoppi il budget, per logica pensavo fosse lo stesso visto che in ogni caso è impossibile esca 1 o 0 . però ho capito cosa vuoi dire ,adesso ricarico un aggiornamento, pazienta qualche minuto
Messaggio unito automaticamente:

ok, rifatto tutto grazie alla tua delucidazione sui 2dadi.
che idiota che sono era una cosa banalissima.
ora mi manca il fattore budget che aumenta a seconda del numero vincente
Java:
package modulo4;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Lancio_dadi_casa {

    public static void main(String[] args) {        

        int dado1;   // numero del primo dado.
        int dado2;   // numero del secondo dado.
        int tiro;   // il totale dei 2 tiri (somma dei due).
        
        dado1 = (int)(Math.random()*6) + 1;
        dado2 = (int)(Math.random()*6) + 1;
        tiro = dado1 + dado2;
        
        System.out.println("il primo dado da come numero " + dado1);
        System.out.println("il secondo dado da come numero " + dado2);
        System.out.println("il totale dei tiri è" + tiro);

    }  // fine main()
 
}
 
mi interessa,ho pensato io logicamente visto che a me interessa estrapolare dei numeri dal risultati per tradurli in azione,ad esempio se esce 2 o 11 raddoppi il budget, per logica pensavo fosse lo stesso visto che in ogni caso è impossibile esca 1 o 0 . però ho capito cosa vuoi dire
Brevemente:
  • ci sono zero modi per estrarre l'1;
  • per estrarre il 2 devi estrarre 1 con entrambi i dadi;
  • per estrarre il 3 va bene sia (1, 2) che che (2, 1);
  • per estrarre il 4 va bene sia (1, 3) che (2, 2) che (3, 1);
  • etc...
Per capirlo bene puoi fare un programmino che calcola le probabilità:
Java:
import java.util.HashMap;
import java.util.Map;

public class TwoDicesProbability {
    public static void main(String[] args) {
        Map<Integer, Integer> counter = new HashMap<>();
        for (int x = 1; x <= 6; x++) {
            for (int y = 1; y <= 6; y++) {
                counter.put(x + y, counter.getOrDefault(x + y, 0) + 1);
            }
        }

        for (var e: counter.entrySet()) {
            System.out.printf("Pr[sum = %d] = %.2f%%\n", e.getKey(),  e.getValue() / 36. * 100);
        }
    }
}
output:
Codice:
Pr[sum = 2] = 2.78%
Pr[sum = 3] = 5.56%
Pr[sum = 4] = 8.33%
Pr[sum = 5] = 11.11%
Pr[sum = 6] = 13.89%
Pr[sum = 7] = 16.67%
Pr[sum = 8] = 13.89%
Pr[sum = 9] = 11.11%
Pr[sum = 10] = 8.33%
Pr[sum = 11] = 5.56%
Pr[sum = 12] = 2.78%
La tua versione vecchia estraeva equiprobabilmente un numero da 1 a 12, ma il 2 e il 12 sono molto rari e l'1 è addirittura impossibile. Morale della favola: se tiri due dadi a sei facce ti conviene scommettere sul 7. Se tiri k dadi a n facce, con n numero pari, ti conviene scommettere sul valore centrale, ovvero (kn + k)/2.

Ho notato solo ora che stavi cercando di farlo con l'interfaccia grafica ma anche quella parte di codice era sbagliata. Non so niente di swing, ma guardando su internet mi pare di aver capito che non si usa in quel modo. Ti consiglio prima di risolverlo senza utilizzare l'interfaccia grafica (come stai facendo ora) e preoccuparti solo più tardi di aggiungerla, almeno ti occupi di un problema per volta.
 
  • Mi piace
Reazioni: Webber e MRPants
ecco ,alla fine sono riuscito a finirlo e a presentarlo, ho superato il corso ma lo pubblico per i posteri , grazie st3ve per il supporto!

Java:
package modulo4;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Lancio_dadi_casa {

    public static void main(String[] args) {    
        
        String puntata;
        int portafoglio = 1000;
        int valPuntata,risultato;
        int dado1;   // numero del primo dado.
        int dado2;   // numero del secondo dado.
        int tiro;   // il totale dei 2 tiri (somma dei due).
        
        dado1 = (int)(Math.random()*6) + 1;
        dado2 = (int)(Math.random()*6) + 1;
        tiro = dado1 + dado2;
        
               
        System.out.println("il primo dado da come numero " + dado1);
        System.out.println("il secondo dado da come numero " + dado2);
        System.out.println("il totale dei tiri è  " + tiro);
        
        //fine tiro dei dadi
       
        while ((portafoglio > 10)&&(portafoglio < 5000)) {
            
        //inizio gestione del portafoglio    
            puntata = JOptionPane.showInputDialog("portafoglio = " + portafoglio + "euro\n la tua puntata");
            valPuntata = Integer.parseInt(puntata);
            
            JOptionPane.showMessageDialog(null, "Hai puntato = " + valPuntata + "euro\n portafoglio attuale "+ (portafoglio-valPuntata)
                    + "euro\n digita ok per lanciare i dadi ");
            
            risultato = tiro;
            
            //inizio lista premi
            if (risultato == 2 || risultato == 12) {
                JOptionPane.showMessageDialog(null, "Valore dadi= " + risultato + "hai vinto questo lancio!" + "\nVinto =" + (valPuntata * 4));
            }
            if (risultato == 3 || risultato == 11) {
                JOptionPane.showMessageDialog(null, "Valore dadi= " + risultato + "hai vinto questo lancio!" + "\nVinto =" + (portafoglio +  (valPuntata *2)));
            }
            if (risultato == 4 || risultato == 10) {
                JOptionPane.showMessageDialog(null, "Valore dadi= " + risultato + "hai vinto questo lancio!" + "\nVinto =" + (valPuntata * 2));
            }
            if (risultato == 2 || risultato == 12) {
                JOptionPane.showMessageDialog(null, "Valore dadi= " + risultato + "hai vinto questo lancio!" + "\nVinto =" + (valPuntata ));
            }
            else {
                JOptionPane.showMessageDialog(null, "hai perso questo tiro"+"\nperdi" + valPuntata +"euro");
                System.exit(0);
            }//fine plista premi
                
        
            
        }

    }  // fine main()
 
}
Messaggio unito automaticamente:

si può chiudere ,post risolto :)
 
  • Love
Reazioni: St3ve
Stato
Discussione chiusa ad ulteriori risposte.