Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Simulazione lancio di due dadi
Forum - Java - Simulazione lancio di due dadi

Avatar
DarkSkull (Normal User)
Newbie


Messaggi: 3
Iscritto: 29/12/2007

Segnala al moderatore
Postato alle 12:29
Lunedì, 16/05/2011
Salve a tutti! Mi sto esercitando con questo linguaggio e sto eseguendo degli esercizi. Uno dei quali mi chiede di simulare il lancio di 2 dadi, sommare i risultati dei due dadi (e quindi ottenere un valore compreso tra 2 e 12) e mostrare poi tramite un altro array la frequenza con cui quest i valori compaiono.
Vi posto il mio codice:
Codice sorgente - presumibilmente Java

  1. import java.util.Random;
  2.  
  3. public class LanciaDadi
  4. {
  5.    public static void main(String args[])
  6.    {
  7.       Random randomNumbers = new Random();
  8.  
  9.       int frequenza[] = new int[7];
  10.       int somma[] = new int[13];
  11.      
  12.       for (int lanci = 1; lanci <= 36000; lanci++)
  13.       {
  14.          ++somma[frequenza[1 + randomNumbers.nextInt(6)] + frequenza[1 + randomNumbers.nextInt(6)]];
  15.       }
  16.      
  17.       System.out.printf( "%s%10s\n", "Valore", "Frequenza" );
  18.    
  19.       for (int faccia = 1; faccia < somma.length; faccia++)
  20.       {
  21.          System.out.printf( "%4d%10d\n", faccia, somma[faccia]);
  22.       }
  23.    }
  24. }



Il problema e' che in output l'array somma restituisce 0 per ogni valore!!
Ve lo posto direttamente per farvi capire meglio:
Faccia Frequenza
   1         0
   2         0
   3         0
   4         0
   5         0
   6         0
   7         0
   8         0
   9         0
  10         0
  11         0
  12         0

Ultima modifica effettuata da DarkSkull il 16/05/2011 alle 12:30
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 13:52
Lunedì, 16/05/2011
Codice sorgente - presumibilmente Plain Text

  1. ++somma[frequenza[1 + randomNumbers.nextInt(6)] + frequenza[1 + randomNumbers.nextInt(6)]];


Questo codice non ha alcun senso. Infatti frequenza è un array inizializzato con valori nulli (tutti 0). Senza alcun tipo di assegnamento prima, frequenza[j] conterrà sempre 0 per ogni j. Stai di fatto continuando a sommare 1 all'elemento di posto 0, che il secondo for non enumera (in quanto parti da 1). Se controllassi il valore di somma[0] vedresti che è 36000.

Di fatto, quello che stavi tentando di scrivere è:
Codice sorgente - presumibilmente Java

  1. int sommaDadi = 0;
  2. for(int dado = 0; dado < 2; dado++)
  3. {
  4.    int risultato = 1 + randomNumbers.nextInt(6);
  5.    ++frequenza[risultato];
  6.    sommaDadi += risultato;
  7. }
  8. ++somma[sommaDadi];


Puoi decidere o meno di tenerti il for, a seconda che tu voglia o meno cambiare il numero di dadi.
Però è meglio se inizi ad usare gli array con base 0. E' inutile sprecare un elemento.

PM
Avatar
DarkSkull (Normal User)
Newbie


Messaggi: 3
Iscritto: 29/12/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 14:38
Lunedì, 16/05/2011
Grazie mille!!

PM