Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208

    Shuffle()

    Scusa ma non capisco proprio cosa combina lo shuffle!
    Il codice è il seguente:
    public static void shuffle(String[] a) {
    int N = a.length;
    for (int i = 0; i < N; i++) {
    int r = i + (int) (Math.random() * (N-i)); // between i and N-1
    swap(a, i, r);
    }
    }

    -----------------------------------------------------
    public static void exch(String[] a, int i, int j) {
    String swap = a[i];
    a[i] = a[j];
    a[j] = swap;
    }
    Quando fa il calcolo di r, non rischia di andare oltre la posizione max dell'array?
    Es:Il mio array è composto da 4 elementi
    se i=1 e la funziona Random calcola un valore=4
    il valore di r non sarà r=5
    quindi oltre la massima dimensione dell'array che è 4? cosa succede?

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

    Re: Shuffle()

    Originariamente inviato da wave00
    Quando fa il calcolo di r, non rischia di andare oltre la posizione max dell'array?
    Con il codice sopra, no. Math.random() ritorna un valore compreso tra 0.0 (incluso) e 1.0 (escluso). Quindi dato ad esempio N=4 e i=1, il valore di 'r' può andare da 1 a 3.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    mmm no mi è chiaro!
    scusa se faccio
    Math.Random()*10
    io ottengo valori da 0 a 10.... no?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da wave00
    mmm no mi è chiaro!
    scusa se faccio
    Math.Random()*10
    io ottengo valori da 0 a 10.... no?
    No, per dirla in modo più semplice, Math.random() ritorna un valore tra 0.0 e 0,99999...... (ecco il perché del 1.0 escluso). Ora ... visto che non avrai mai 1.0 dalla random(), allora moltiplicando per 10 non avrai mai 10.0 ma al massimo 9,9999.......
    Se fai il cast a int, tronchi di brutto i decimali, quindi al massimo 9.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da wave00
    mmm no mi è chiaro!
    scusa se faccio
    Math.Random()*10
    io ottengo valori da 0 a 10.... no?
    No: ottieni valori tra 0 e 9.9

    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    ok, quindi sommati con i valori di i, posso andare in overflow

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    208
    sono proprio andato!! VVoVe:
    è N-i e non N-1.
    :-d
    SCUSATE!!!

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.