Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2018
    Messaggi
    14

    togliere le ripetizioni nei numeri generati randomicamente [Tombola in Java]

    Salve,
    sono sempre io, come ripeto ogni volta ho 15 anni e molta voglia di imparare java, pero essendo autodidatta e ancora alle prime armi non mi ritrovo con la programmazione ad oggetti, oggi sono riuscito a risolvere alcuni problemi del mio programma della scorsa volta, come avrete letto dal titolo della discussione, si tratta di una tombola anche se non ancora finita.
    Dopo aver generato i numeri devo riuscire a impedire loro di ripetersi(essendo casuali non si puo decidere), quindi serve un controllore che faccia questo una volta estratti i numeri, ed eventualmente se duplicate ripetere l estrazione del numero.
    Mi dispiace se non mi sono spiegato bene, provate a capire per favore.
    Per fare questo avevo pensato di utilizzare un array che salvasse i risultati mano a mano che essi vengano estratti, per poi saltare tutto il resto del procedimento e ricominciare da capo se duplicato, pero non sono riuscito a salvare i numeri prodotto dal metodo random in un array, sotto il codice a cui sto lavorando mi scuso se disordinato e scritto male, come detto all' inizio sono alle prime armi e anzi se potete sarei felice di ricevere critiche costruttive.
    codice:
    import java.util.Random;public class Tombola{
        public static void main(String args[]){
            int numeri;
            int[] numeri2= new int[90];
            int numeriusciti;
            int contatore=0;
            int contatore2=1;
            String premi;
            int comandi=0;
            String nome;
            String cognome;
            int stop=0;
            int a=0;
            System.out.println("Benvenuto nella Tombola");
            System.out.println("una volta iniziata per decretare i premi basta scriverli in minuscolo");
            System.out.println("\"esempio: tombola\"");
            System.out.println("Per iniziare premere INVIO");
            premi = Input.readLine();
            while (contatore<91){
                java.util.Random numeri3=new java.util.Random();
                System.out.println("Numero:" + numeri3.nextInt(90));
                numeri2[a]=(int)numeri3;
                a++;
                System.out.println(numeri2[a]);
                if (contatore==0) System.out.println("Per estrarre un numero premere Invio");
                if (contatore==1)System.out.println("Inserire premi se ce ne sono");
                premi = Input.readLine();
                if (! premi.equals("")) {
                    contatore2=1;
                    while(contatore2<2){
                        if (premi.equals("tombola")) {
                            System.out.print("Inserire nome vincitore: ");
                            nome=Input.readLine();
                            System.out.println("");
                            System.out.print("Inserire cognome vincitore: ");
                            cognome=Input.readLine();
                            System.out.println("");
                            System.out.println(nome+" "+cognome+" HA FATTO BINGO!");    
                            System.out.println("");
                            stop=1;
                            break;        
                        }
                        if (premi.equals("terna")) {
                            System.out.print("Inserire nome vincitore: ");
                            nome=Input.readLine();
                            System.out.println("");
                            System.out.print("Inserire cognome vincitore: ");
                            cognome=Input.readLine();
                            System.out.println("");
                            System.out.println(nome+" "+cognome+" ha fatto terna");
                            System.out.println("");                    
                            contatore2=3;
                        }
                        if (premi.equals("quaterna")) {
                            System.out.print("Inserire nome vincitore: ");
                            nome=Input.readLine();
                            System.out.print("Inserire cognome vincitore: ");
                            cognome=Input.readLine();
                            System.out.println("");
                            System.out.println(nome+" "+cognome+" ha fatto quaterna");    
                            System.out.println("");
                            contatore2=3;                
                        }
                        if (premi.equals("ambo")) {
                            System.out.print("Inserire nome vincitore: ");
                            nome=Input.readLine();
                            System.out.print("Inserire cognome vincitore: ");
                            cognome=Input.readLine();
                            System.out.println("");
                            System.out.println(nome+" "+cognome+" ha fatto ambo");    
                            System.out.println("");                    
                            contatore2=3;
                        }
                        if (! premi.equals("ambo") ){
                            if (! premi.equals("terna")){
                                if (! premi.equals("quaterna")){
                                    if (! premi.equals("bingo")){
                                        System.out.println("Il premio inserito non esiste scegliere tra:");
                                        System.out.println("tombola");
                                        System.out.println("quaterna");
                                        System.out.println("terna");
                                        System.out.println("ambo");
                                        System.out.println("Se ti sei sbagliato premi invio");
                                        premi = Input.readLine();
                                        if (premi.equals("")) break;
                                        contatore2--;
                                    }
                                }
                            }
                        }
                    contatore2++;
                    }
                }
            if (stop==1) break;
            contatore++;            
            }
        }
    }
    mi scuso in anticipo per non esser stato chiaro nella spiegazione.

    sono consapevole che il codice è disordinato e ha molte parti superflue come variabili inutilizzate, ma una volta finito lo ripuliro(alcune delle variabili dichiarate all inizio ma poi non utilizzate mi serviranno in futuro, come per esempio per rivedere tutti i numeri usciti eccetera).
    Ultima modifica di Jleon24; 16-09-2018 a 22:01

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Jleon24 Visualizza il messaggio
    Dopo aver generato i numeri devo riuscire a impedire loro di ripetersi(essendo casuali non si puo decidere), quindi serve un controllore che faccia questo una volta estratti i numeri, ed eventualmente se duplicate ripetere l estrazione del numero.
    A dire il vero, esiste una tecnica più "furba". Si crea un array o lista (lista nel senso collezione es. java.util.ArrayList) che contiene inizialmente tutti i numeri della tombola in ordine 1, 2, 3, ...... 90 (basta un banale for).
    Avendo 90 valori, estrai un indice x a caso tra 0 e 89 compresi. Prendi il numero a quell'indice x e lo rimuovi materialmente dall'array/lista.
    Ora hai un valore in meno, quindi estrai un indice a caso tra 0 e 88 compresi, ecc... Ad un certo punto i numeri finiranno. E non si possono quindi "ripetere".

    E una logica del genere si può benissimo incapsulare in una classe apposita, cosa che ti farebbe esercitare con le classi. Quindi fai una classe es. EstrattoreNumeriTombola (o altro nome che vuoi) che contiene SOLO questa logica, con metodi es. public boolean numeriDisponibili() e public int estraiNumero()
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.