Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Java] Array di numeri casuali differenti fra loro

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

[Java] Array di numeri casuali differenti fra loro

Postdi sguggiari » 17/06/07 16:11

Ciao,
premetto che conosco Java da pochi mesi...
Il mio problema è il seguente: vorrei creare un array di 8 elementi int tutti diversi tra loro con un range da 1 a max.
Il codice che ho scritto è il seguente:
Codice: Seleziona tutto
     for(int i=0; i<8; i++){   // 8 numeri differenti
        int error = 0;
        int temp = 0;
        do{            // controlla se già presente nell'array
           temp = (int)(Math.random() * max) + 1;
           for(int k=0; k<=i; k++){
              if(result[k] == temp)
                 error = 1;
                }
             }
        while(error == 1);
        result[i] = temp;
        System.out.println("Result: " + result[i]);
     }


Ora, il codice di per se funziona, ma se la variabile max è troppo piccola si impianta tutto (o magari ci mette troppo tempo, mandando in crash il tutto)... Se metto max=100, ottengo come desiderato quanto segue:
Codice: Seleziona tutto
Result: 15
Result: 43
Result: 12
Result: 59
Result: 10
Result: 7
Result: 71
Result: 73

Ora la domanda è la seguente... cooscete per caso un metodo per fare il tutto in maniera più semplice e veloce?

Grazie per le eventuali risposte
Sandro
Avatar utente
sguggiari
Utente Junior
 
Post: 91
Iscritto il: 28/11/05 15:00
Località: CH

Sponsor
 

Re: [Java] Array di numeri casuali differenti fra loro

Postdi sguggiari » 17/06/07 16:21

Nel frattempo ho risolto da solo :D
Il problema era che non rimettevo a 0 la variabile error.
Questo è il codice funzionante....
Codice: Seleziona tutto
     for(int i=0; i<8; i++){   // 8 numeri differenti
        int error = 0;
        int temp = 0;
        do{            // controlla se già presente nell'array
           temp = (int)(Math.random() * max) + 1;
           error = 0;
           for(int k=0; k<=i; k++){
              if(result[k] == temp)
                 error = 1;
                }
             }
        while(error == 1);
        result[i] = temp;
        System.out.println("Result: " + result[i]);
     }


Ciao a tutti e scusate per il post inutile
Avatar utente
sguggiari
Utente Junior
 
Post: 91
Iscritto il: 28/11/05 15:00
Località: CH

Postdi mrblue » 04/07/07 11:17

Prova questo
Codice: Seleziona tutto
public static void generaACaso()
{
   int[] result=new int[8];
   Vector resultV=new Vector();
   Integer elem=null;
   int temp=0;
   int max=8;
      for(int i=0;i<result.length;i++)
      {
         do{
             temp= (int)(Math.random() * max) + 1;
            elem=new Integer(temp);
         }
         while(resultV.contains(elem));

            resultV.add(elem);
            result[i]=temp;
      }
}

se poi vuoi un array di Integer anziche int puoi prenderlo dal vettore
Sbagliare è umano, ma per riuscire davvero a incasinare completamente le cose ci vuole un computer.
---------------------
http://mrblue73.blogspot.com/
mrblue
Utente Senior
 
Post: 364
Iscritto il: 22/10/01 01:00
Località: Roma

Postdi zello » 05/07/07 08:35

Uno può anche reinventare la ruota, però esiste l'interfaccia java.util.Set (implementata per esempio da java.util.Set), la cui descrizione recita:
public interface Set
extends Collection
A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction.

Il cui metodo add recita:
add
public boolean add(Object o)
Adds the specified element to this set if it is not already present (optional operation). More formally, adds the specified element, o, to this set if this set contains no element e such that (o==null ? e==null : o.equals(e)). If this set already contains the specified element, the call leaves this set unchanged and returns false.

Se nel codice sopra usi un HashSet puoi senza problemi commentare il do/while.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Postdi mrblue » 09/07/07 18:29

il do while era per inserire il numero di elementi che si vuole nell'array di int... comunque si HashSet è piu elegante ;)
Sbagliare è umano, ma per riuscire davvero a incasinare completamente le cose ci vuole un computer.
---------------------
http://mrblue73.blogspot.com/
mrblue
Utente Senior
 
Post: 364
Iscritto il: 22/10/01 01:00
Località: Roma


Torna a Programmazione


Topic correlati a "[Java] Array di numeri casuali differenti fra loro":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti