JavascriptProva

venerdì 10 agosto 2018

Numeri casuali

Ho un intervallo di tempo e voglio estrarre a sorte un valore casuale in un range che va dal valore dell'intervallo meno una percentuale al valore dell'intervallo più la stessa percentuale.

min = intervallo - intervallo * percentuale
max = intervallo + intervallo * percentuale
Andiamo...

Ecco il codice, cui ho aggiunto due mie funzioni, una che converte il tempo espresso in ore, minuti e secondi in millisecondi, l'altra che dà una lettura sotto forma di stringa in ore, minuti e secondi di un tempo espresso in millisecondi.
        long intervallo = intervalInMillis(1,0,0);
        float percentuale=0.5f;
        long variazione = (long)((float)intervallo * percentuale);
        long min = intervallo - variazione;
        long max = intervallo + variazione;

        long random = (long)(Math.random() * (max - min + 1) + min);

        System.out.println("minimo "+strTime(min));
        System.out.println("massimo "+strTime(max));
        System.out.println("valore casuale "+strTime(random));

    }

    public long intervalInMillis(long ore, long minuti, long secondi){
        return ore*3600*1000+minuti*60*1000+secondi*1000;
    }

    public String strTime(long tempo) {
        long minuti = tempo / 60000;
        long ore = minuti / 60;
        minuti = minuti % 60;
        return "ore: " + ore + "; minuti: " + minuti;
    }
Ed ecco il risultato (ho scelto una percentuale del 50% in meno o in più su un intervallo di un'ora:
08-10 21:33:05.953 6860-6860/com.antonello.labagosto18 I/System.out: minimo ore: 0; minuti: 30
08-10 21:33:05.954 6860-6860/com.antonello.labagosto18 I/System.out: massimo ore: 1; minuti: 30
                                                                     valore casuale ore: 1; minuti: 29
08-10 21:34:09.683 6936-6936/com.antonello.labagosto18 I/System.out: minimo ore: 0; minuti: 30
                                                                     massimo ore: 1; minuti: 30
                                                                     valore casuale ore: 1; minuti: 13
08-10 21:34:57.812 6981-6981/com.antonello.labagosto18 I/System.out: minimo ore: 0; minuti: 30
                                                                     massimo ore: 1; minuti: 30
                                                                     valore casuale ore: 0; minuti: 39
08-10 21:35:52.024 7026-7026/? I/System.out: minimo ore: 0; minuti: 30
                                             massimo ore: 1; minuti: 30
                                             valore casuale ore: 1; minuti: 4

Nessun commento:

Posta un commento