Autore Topic: Ripetizione numeri con Random  (Letto 180 volte)

Offline kiry32

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    ubuntu 16.04
Ripetizione numeri con Random
« il: 11 Luglio 2016, 13:20:49 CEST »
0
Salve a tutti, per non far ripetere sempre lo stesso numero in Random io ho  ho creato questa classe:
Codice (Java): [Seleziona]
package com.kiry32.root.quizaia;

import java.util.Random;
import java.util.Vector;

/**
 * Created by root on 10/07/16.
 */

public  class RadAns {

         int  scDom;

        public  RadAns(){
            Vector  numbers=new Vector();

            Random casuale=new Random();

            scDom=casuale.nextInt(60);
            numbers.addElement(scDom);

            while (numbers.contains(scDom))
            {
                scDom=casuale.nextInt(60);
            }
        }

}

che viene richiamata in altre 12 classi così:
Codice (Java): [Seleziona]
RadAns scel= new RadAns();

        scl1=scel.scDom;

il problema è che mi ripete dei numeri da una classe all' altra per esempio:
Codice: [Seleziona]
in classe1 : esce il numero 34

in classe 3: esce di nuovo il numero 34

anche usando Vector
 come posso fare??

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 618
  • Respect: +136
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Ripetizione numeri con Random
« Risposta #1 il: 11 Luglio 2016, 14:43:53 CEST »
+1
Devi rendere "numbers" statico, così la stessa istanza è condivisa con tutte le altre classi.

Oppure condividi l'istanza con le classi che la usano.




Post unito: 11 Luglio 2016, 14:54:48 CEST
Ad ogni modo l'algoritmo è molto poco efficiente.

Ti consiglio di ragionare come se avessi un "bussolotto" dal quale estrarre il numero. Ogni volta che estrai un numero, ne hai uno in meno nel bussolotto.

Codice (Java): [Seleziona]
public class RadAns {

        private static Random casuale;
        private static List<Integer> bussolotto = null;
        int scDom;

        public RadAns(){
                //Inizializzo bussolotto
                if (bussolotto == null) {
                        bussoloto = new ArrayList<Integer>();
                        //Aggiungo i numeri da 1 a 60
                        for (int i=0; i<60; i++) {
                                bussoloto.Add(i + 1); //Togli il "+1" per fare da 0 a 59
                        }
                        //Inizializzo generatore di numeri casuali
                        casuale = new Random();
                }
               
                if (bussoloto.size() > 0) {
                        //Scelgo l'elemento dal bussolotto
                        int scelto = casuale.nextInt(bussoloto.size());
                        //Estraggo l'elemento scelto dal bussolotto
                        scDom = bussolotto.remove(scelto);
                } else {
                        //Tutti i numeri sono stati estratti
                        scDom = -1;
                }
        }
}
« Ultima modifica: 11 Luglio 2016, 14:54:48 CEST da Ohmnibus, Reason: Merged DoublePost »
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.