Newsgroup: it.comp.java
Titolo: Programmare una tombola!

Ciao,
in questi giorni di vacanze natalizie si vedono spesso i parenti giocare a
tombola (già, si vedono, perchè io non gioco :-PPP);
così mi è sono detto: perchè non provare a farne una in java?
Io volevo fare solo il tabellone (ossia quello con le sei cartelle);
farei estrarre al computer un numero compreso tra 1 e 90, e lo farei
"segnare" (con una "x", un cerchio, o qualcosa del genere) sul tabellone che
gli avrei fatto disegnare in partenza, dite che sia una cosa possibile?
Grazie!
Ciaooooooooooo!

 ha scritto nel messaggio
news:auhg0c$79882$1...@ID-147723.news.dfncis.de...

nel tutorial sun c'è un esempio di Bingo.
Vedi qui 
http://java.sun.com/docs/books/tutorial/together/bingo/

 ha scritto nel messaggio
news:auhg0c$79882$1...@ID-147723.news.dfncis.de...


 per velocizzare il calcolo del processore.
Anche io avevo pensato a questo problema e pensavo di risolverlo con un
ciclo;
mi spiego: gli faccio "estrarre" un numero, controlla se è uguali a dei
numeri già usciti, se è uguale ne estrae un altro, se è diverso, lo prende
in considerazione!
GRAZIE!
Ciao!
Buone Feste!

 se è diverso, lo prende in considerazione!
È un metodo piuttosto inefficiente e, quando rimangono pochi numeri da
estrarre, potrebbe richiedere parecchi tentativi.
Un metodo più semplice è questo:
 - crei un array di 90 (indici da 0 a 89) numeri e lo inizializzi mettendo
nel primo elemento il numero 1, nel secondo 2... e così via.
- prendi un numero random intero compreso fra 0 e 89 e leggi il numero che
si trova nell'elemento corrispondente.
- scambi il numero che si trova in questo elemento con l'ultimo elemento
dell'array.
- prendi un nuovo numero random compreso, però, fra 0 e 88 (in tal modo il
numero estratto in precedenza non verrà più preso in considerazione.
- scambi il numero estratto con il penultimo elemento dell'array.
- continui fino a che non rimane nessun numero da estrarre
Più o meno dovresti fare così:
public class Tombola {
  int a[] = new int[90];
  int max_n;
  Random casuale;
   public Tombola() {
      for (int i = 0; i < 90; i++)
         a[i] = i + 1;
      casuale = new Random();
      max_n = 90;
   }
   public int estrai() {
      int n = casuale.nextInt(max_n);
      int temp = a[n];
      a[n] = a[--max_n];
      a[max_n] = temp;
      return temp;
   }
  public static void main(String[] args) {
       Tombola t = new Tombola();
       for (int i = 0; i < 90; i++)
         System.out.println(t.estrai());
   }
}
Maurizio.

sono d'accordo....però in fase di calcolo non so se è più veloce questo
metodo oppure quello consigliato da "pole" nel post precedente :
<<io ti consiglierei di usare una List, riempita con i numeri che ti
interessano, per poi "mescolarla" col metodo shuffle della classe
Collections (nel package java.util). A quel punto non hai che da prendere
un iteratore e via :)>>
ciao
"Maurizio." <mau...@libero.itA> ha scritto nel messaggio
news:gL_O9.54915$TC5.1...@twister1.libero.it...




Uhm secondo me un modo veloce potrebbe essere questo:
-crea un Vector di numeri da 1 a 90 (che quindi avranno indici da 0 a
89)
- a ogni estrazione genera un numero casuale intero (puoi usare rand,
ceil e il modulo) compreso tra 0 e la size del Vector.
- il numero generato ti da l'indice a cui devi estrarre il numero
uscito per la tombola... che togli dal vettore.
Così il vettore contiene via via solo i numeri rimasti da estrarre e
la probabilità di estrazione rimane uniforme (altre soluzioni qui
proposte alterano purtroppo la densità di probabilità).
NOTA: ovviamente la size cambia a ogni estrazione.. per questo
funziona sto' giochino.
FINE
Augusto Pucci
http://www.neuraldaemon.com/pucci