Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Ciclo for a valori casuali

    Ciao a tutti.
    Ho un problemino con un semplicissimo ciclo for.

    codice:
    for (int i=0; i<5; i+=(int)Math.random() * 5){
    Il ciclo in pratica dovrebbe iterarsi non seguendo l'ordine numerico (0,1,2,3,4) ma seguendo un ordine casuale (es 4,3,1,0,2)
    Come posso fare affinchè i numeri random non si ripetano? Guarda caso potrei avere che il ciclo sia su questi valori (1,2,0,0,3) e due 0 ripetuti mi sballano tutto.

    Che potete darmi qualche dritta???


    Grazie!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Credo che tu non abbia ben chiara una cosa del ciclo for che hai postato:
    codice:
    for (int i=0; i<5; i+=(int)Math.random() * 5){
    Questa istruzione non cicla su valori casuali, ma su valori casualmente crescenti: tu aggiungi sempre un valore casuale (e positivo) ad i, quindi ottieni qualcosa del genere:
    0, 1, 4

    Quindi ottieni un ciclo che cresce sempre e termina quando i raggiunge un valore maggiore o uguale a 5.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Direi che la cosa più semplice è generare un array mischiato e ciclare sulla sua lunghezza.

    Per mescolare ci sono diversi possibili approcci... per esempio

    codice:
    import java.util.Random;
    
    ...
    
    Random r = new Random();
    
    //Sia arr il tuo array di int da mischiare
    
    for (int i=0; i < arr.length; i++) {
      int rPos = r.nextInt(arr.length);
      int temp = arr[i];
      arr[i] = arr[rPos];
      arr[rPos] = temp;
    }
    Se devi mescolare array di oggetti invece puoi passare attraverso shuffle di Collection
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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 © 2026 vBulletin Solutions, Inc. All rights reserved.