Pages: [1]   Go Down
Print
Author Topic: Esercizio dadi  (Read 1778 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Zallak
Matricola
*
Offline Offline

Posts: 72


« on: 16-11-2012, 21:06:07 »

Può andare questo codice per l'esercizio lasciato dal prof o ci sono errori a livello di probabilità?
 
Code:
public class Dadi2
{
public static void main(String[] args)
{
double dd = 0;
int c = 0, k = 0, t = 0, d0 = 0;

do
{
dd = (Math.random()*6) + 1;
int d = (int) dd;
c++;
k++;

if ( d == d0)
{
t++;
}

d0 = d;

if (k > 5)
{
k = 0;
t = 0;
}
} while (t != 5);

System.out.println("Ho ottenuto 5 facce uguali consecutive dopo "+c+" tentativi.");




}

}
Logged
Frank the reaper
Matricola
*
Offline Offline

Posts: 31


« Reply #1 on: 16-11-2012, 21:14:32 »

ti conviene fare il casting a "dd"... io l'ho risolto in un altro modo XD


import java.util.*;
public class lanciodadox5
   {
   public static void main (String [] args)
      {
         Random x = new Random();
         long contatore=0;
         final int d=6;
         int dado;
         int lancio= x.nextInt(d)+1;
         do{
            do{
               do{
                  do{
                     dado=lancio;
                     contatore++;
                     lancio= x.nextInt(d)+1;
                     contatore++;
                        }while (lancio != dado);
                     lancio= x.nextInt(d)+1;
                     contatore++;
                  }while (lancio != dado);
                     lancio= x.nextInt(d)+1;
                 contatore++;
               }while (lancio != dado);
              lancio= x.nextInt(d)+1;
               contatore++;
            }while (lancio != dado);
            System.out.println ("Ci sono voluti "+contatore+" tentativi! per il numero "+dado);
         
      }
   }      

il nextInt() è un metodo random equivalente al Math.random... però è già intero ...
Se hai dubbi non esitare a chiedere
« Last Edit: 16-11-2012, 22:26:23 by Frank the reaper » Logged
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #2 on: 18-11-2012, 21:52:18 »

Giusto facendo direttamete il casting risparmio l'uso di una varibile Smiley grazie dei chiarimenti  ok
Logged
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #3 on: 19-11-2012, 16:09:44 »

Giusto facendo direttamete il casting risparmio l'uso di una varibile Smiley grazie dei chiarimenti  ok

io l'ho fatto cosi  cool

Code:
import javax.swing.*;

public class Dado5lanci
{
public static void main (String[] args)
{
int i=0,c=0,prec=0, suc=0;
while(c<4){
int num=(int)(Math.random()*6+1);
//System.out.println(num);
i++;
suc=num;
if(prec==suc) c++;
else {
prec=suc;
c=0;
}
}
System.out.println("Il primo numero che è stato ripetuto 5 volte consecutive e' " + prec + ". \n Sono stati effettuati " +i+ " lanci");
}
}

che dici zallak  ?
Logged
Ciadamidaro Davide
Matricola
*
Offline Offline

Posts: 34


« Reply #4 on: 19-11-2012, 18:45:37 »

soluzione con una variabile in meno
Code:
package dado;

public class Dado
  {
    public static void main(String[] args)
      {
        int i=0,n,c=1,sum=0;
       
        do
          {
            n=1+(int)(Math.random()*6);
            System.out.println("è uscito il numero "+n);
            sum+=n;
            i++;
            if(sum==2*n)
              {
                c++;
                sum=n;
              }
            else
              {
                sum=n;
                c=1;
              }
           
          }while(c!=5);
        System.out.println("il dado è stato tirato "+i+" volte");
      }
  }
Logged
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #5 on: 25-11-2012, 15:39:00 »

Giusto facendo direttamete il casting risparmio l'uso di una varibile Smiley grazie dei chiarimenti  ok

io l'ho fatto cosi  cool

Code:
import javax.swing.*;

public class Dado5lanci
{
public static void main (String[] args)
{
int i=0,c=0,prec=0, suc=0;
while(c<4){
int num=(int)(Math.random()*6+1);
//System.out.println(num);
i++;
suc=num;
if(prec==suc) c++;
else {
prec=suc;
c=0;
}
}
System.out.println("Il primo numero che è stato ripetuto 5 volte consecutive e' " + prec + ". \n Sono stati effettuati " +i+ " lanci");
}
}

che dici zallak  ?
La soluzione mi sembra buona unico appunto: per i cicli che si è sicuri si eseguano almeno una volta l'uso del do while al posto del while è più elegante  
Logged
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #6 on: 25-11-2012, 15:46:33 »

soluzione con una variabile in meno
Code:
package dado;

public class Dado
  {
    public static void main(String[] args)
      {
        int i=0,n,c=1,sum=0;
        
        do
          {
            n=1+(int)(Math.random()*6);
            System.out.println("è uscito il numero "+n);
            sum+=n;
            i++;
            if(sum==2*n)
              {
                c++;
                sum=n;
              }
            else
              {
                sum=n;
                c=1;
              }
            
          }while(c!=5);
        System.out.println("il dado è stato tirato "+i+" volte");
      }
  }

Bella idea questo codice con il giochetto di controllare il doppio di n dovrebbe essere più efficiente dei nostri   Cheesy Unica cosa io la print di n la metterei fuori dal ciclo altrimenti se prima di uscire 5 facce uguali fa 8793536346 tentativi te li stampa tutti xD
« Last Edit: 25-11-2012, 16:03:37 by Zallak » Logged
DarioL19F
Matricola
*
Offline Offline

Posts: 90


« Reply #7 on: 25-11-2012, 15:58:21 »

Giusto facendo direttamete il casting risparmio l'uso di una varibile Smiley grazie dei chiarimenti  ok

io l'ho fatto cosi  cool

Code:
import javax.swing.*;

public class Dado5lanci
{
public static void main (String[] args)
{
int i=0,c=0,prec=0, suc=0;
while(c<4){
int num=(int)(Math.random()*6+1);
//System.out.println(num);
i++;
suc=num;
if(prec==suc) c++;
else {
prec=suc;
c=0;
}
}
System.out.println("Il primo numero che è stato ripetuto 5 volte consecutive e' " + prec + ". \n Sono stati effettuati " +i+ " lanci");
}
}

che dici zallak  ?
La soluzione mi sembra buona unico appunto: per i cicli che si è sicuri si eseguano almeno una volta l'uso del do while al posto del while è più elegante  

 ok
Logged
Pages: [1]   Go Up
Print
Jump to: