Newsgroup: it.comp.java
Titolo: Generare Numeri Casuali

Ringrazio già da ora chi mi risponde.
Come faccio a conoscere l'esatta sintassi di random ??? ovvero:
L'esempi seguente genera numeri casuali da 0 a 9 in totale 10.
//: Casuale.java
public class Casuale {
        public static void main(String args[]) {
                int x;
                x = ((int) (Math.random() * 10));
                System.out.println("Numero casuale da 0 a 9 = " + x);
        }
}
Ma se volessi fare altri casi come con numeri compresi come faccio ???
Mi sono trovato vari problemi di fronte che non so risolvere come questi:
1)Scrivere il codice  a generare un numero intero casuale che sia multiplo
di 3
e che sia compreso tra 12 e 24 (valori estremi compresi).
2)Generare 1 numero casuale compreso tra l'intervallo [3, 7[.
Per favore mi potete aiutare dicendomi non come si risolvono ma la sintassi
generale.
Nell'esempio precedente lo sapevo fare perchè sapevo come si generano numeri
casuali fino ad un tot, ma per gli altri esempi ????



Non è questione di "sintassi", ma di intelligenza... Gli esercizi che ti
sono stati proposti hanno l'unico scopo di "far lavorare" i neuroni ;)
Prova a renderti le cose un po' più semplici. Per il primo esercizio ad
esempio, prova a mettere i risultati richiesti in una sequenza:
12 15 18 21 24
Dividi per 3 e otterrai
4  5  6  7  8
Sottrai 3 e...
1  2  3  4  5
Quindi, non dovrai fare altro che generare un intero compreso tra 1 e 5,
sommare 3 e moltiplicare per 3.
Spero che gli altri frequentatori non me ne vogliano male...
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
  ---  
http://xenu.freewinds.cx
(per rispondere personalmente leva IlDitoDalCulo)

 casuali fino ad un tot, ma per gli altri esempi ????
Generare un numero casuale fra x e y equivale a generare un numero fra 0 
e y-x e aggiungere x.
Generare un multiplo casuale di 3 compreso fra 12 e 24 equivale a 
generare un numero fra 4 e 8 e moltiplicare per 3.
Su, su... animo, figliuolo.

 e che sia compreso tra 12 e 24 (valori estremi compresi).
Senza fare considerazioni simili a quelle di Echelon NSA e Vega, ovvero
senza pensare a come risolvere il problema, si potrebbe scrivere, in
modalità mindless:
public class Casuale {
        public static void main(String args[]) {
                boolean found = false;
                while (!found)
                {
                int x = ((int) (Math.random()* 1000));
                if (x % 3 == 0 & x <= 24 & x >= 12)
                {
                 System.out.println("Numero casuale da 12 a 24 e multiplo di
3 = " + x);
                 found = true;
                }
                }
        }
}
Ovviamente è inefficiente e un po' stupidotto. Ma trova la soluzione senza
troppo impegno.
Tommaso

 troppo impegno.
...la tua frase si commenta da se'. :-)
Peccato che non sia equivalente in termini di distribuzione di
probabilita'.
Meglio dare un'occhiata alla documentazione della classe java.util.Random.
-- 
Lucio Benfante
Java User Group Padova: 
http://www.jugpadova.it
Brainbench MVP for Java 1: 
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 ha scritto nel messaggio
news:aUMld.327492$35.15...@news4.tin.it...

Ciao
Non sono un genio di java ma ..... secondo me potresti creare un metodo
simile al seguente al quale puoi passare i limiti di intervallo ed il
multiplo che desideri.
Se inserisci 3 come primo parametro 12 come secondo e 24 come terzo ottieni
cio' che vuoi;
Se intendi cambiare limiti e multiplo puoi passare i valori che desideri al
metodo. Se imposti al valore 1 il primo parametro il metodo ti restituira'
un valore intero qualsiasi ( multiplo infatti di 1 ) compreso tra i limiti
indicati. Devi pero' assicurarti che un multiplo, nell'intervallo passato
come parametro al metodo, esista ! altrimenti dal metodo non uscirai mai !
ad esempio, se passi come primo argomento 5 nei limiti 2 e 4 non troverai
mai un multiplo in tale intervallo come del resto non troverai mai un
multiplo di 7 compreso tra 15 e 20! Il metodo dovrebbe quindi comprendere un
gestore di tali eventualita' ed uscire in tale caso .... cosa che non posso
fare ora altrimenti la morosa mi ammazza visto il mio ritardo!
int num = generaMultilpli( 3, 12, 24);
System.out.println("Numero casuale generato = " + num);
 ................
    int generaMultipli(int multiplo, int min, int max)
    {
        int x = 0;
        boolean ok = true;
        while(ok)
        {
            x = min + (int)(Math.random() * ((max + 1) - min));
            if( x % multiplo == 0)
            ok = false;
        }
        return x;
    }
Ciao ..... STEFANO
.....pensandoci bene, non penso sia una cosa molto utile far "girare" un
metodo fino a quando trova un risultato valido ... potrebbero esserci dei
casi in cui la ricerca potrebbe durare "parecchio"!