Visualizzazione dei risultati da 1 a 7 su 7

Discussione: math.random

  1. #1

    math.random

    Salve a tutti, c'è qualcuno che mi saprebbe spiegare come funziona math.random()?
    so che genera un numero casuale tra 0 e 0.9999999999.... però come faccio a generare per esempio un numero tra 0 e 9? o tra 4 e 5?e infine a cosa serve math.round?
    grazie anticipatamente a chi risponderà!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: math.random

    Originariamente inviato da ostyle
    Salve a tutti, c'è qualcuno che mi saprebbe spiegare come funziona math.random()?
    so che genera un numero casuale tra 0 e 0.9999999999.... però come faccio a generare per esempio un numero tra 0 e 9? o tra 4 e 5?
    Moltiplichi .... e poi eventualmente casti a int.

    Originariamente inviato da ostyle
    e infine a cosa serve math.round?
    Esattamente equivalente ad aggiungere 0.5 e poi troncare con floor().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Scusami non c' ho capito molto.....sono nuovo del linguaggio java...potresti farmi un esempio?
    tipo per generare un numero da 2 a 6?mi basta solo la stringa di codice grazie!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da ostyle
    Scusami non c' ho capito molto.....sono nuovo del linguaggio java...potresti farmi un esempio?
    Qui si tratta di matematica, non di Java...

    tipo per generare un numero da 2 a 6?mi basta solo la stringa di codice grazie!
    Se una funzione F ritorna un numero tra 0 (incluso) e 1 (escluso), per adeguare il risultato ad un insieme compreso fra 0 e 6, l'unica cosa che si può fare è moltiplicare per 7 (quindi si ottiene un numero double compreso fra 0 [incluso] e 7 [escluso]) e castarlo ad int.

    Oppure, altra tecnica, moltiplicare il valore della funzione per un numero molto grande (esempio, per 32000) e utilizzare l'operatore modulo per far rientrare il valore all'interno del range voluto.

    Piccolo esempio per ottenere un numero random fra 0 e 6:
    codice:
    // l'operatore modulo restituisce il resto della divisione fra l'operando sinistro e quello destro
    int numero = ((int) (Math.random() * 32000)) % 7;
    Vogliamo ottenere un numero fra 2 e 6?

    codice:
    // Riduciamo l'intervallo
    int numero ((int) (Math.random() * 32000)) % 5
    
    // Ora abbiamo un numero tra 0 e 4 (inclusi)... aggiungiamo 2
    numero += 2;
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    codice:
    int random = (int) (Math.random() * 4 + 2);
    Se Math.random genera 0.0 ottieni 2 mentre se genera 1.0 ottieni 6, negli altri casi ottieni un numero compreso tra 2 e 6. Se ci ragioni un attimo è banale.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da M@P
    codice:
    int random = Math.random() * 4 + 2;
    A parte che mancherebbe un cast a int, comunque il range tecnicamente è tra gli int 2 e 5 compresi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    Il cast infatti l'ho corretto poco dopo aver risposto e molto probabilmente mentre stavi rispondendo. Comunque in effetti oltre quello non ho tenuto di conto del fatto che il range è fino ad 1 escluso. Diciamo che ho dato una risposta un po' troppo affrettata.

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