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

    [J2ME] Problema con il costruttore random()

    Sale mi sto inserendo da poco nel mondo della Java 2 Moblie Edition, ho dei problemi con il costruttore random(), cioè il codice funziona ma forse è un problema matematico, xchè mi genera numeri casuali tra 0 e 10 ma solo pari e avvolte negativi. Se potete aiutarmi vene sarei molto grato.
    Source:
    codice:
     
    package hello;
    
    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;
    import java.util.Random;
    
    public class HelloMIDlet extends MIDlet implements CommandListener {
    
        private Command exitCommand; 
        private Command genCommand; 
        private Display display;    
        private TextBox t;
        private int nRand;
        private boolean rip;
    
        public HelloMIDlet() {
    
            display = Display.getDisplay(this);
            exitCommand = new Command("Exit", Command.EXIT, 0);
            genCommand = new Command("Generate", Command.OK, 1);
        }
    
        public void startApp() {
    
               t = new TextBox("Generate Random",""+nRand, 256, 0);
               t.addCommand(exitCommand);
               t.addCommand(genCommand);
               t.setCommandListener(this);
               display.setCurrent(t);
        
        }
    
        public void pauseApp() {
        }
    
        public void destroyApp(boolean unconditional) {
        }
    
        public void commandAction(Command c, Displayable s) {
            if (c == genCommand)
                {
                 Random gene = new Random();
                 gene.setSeed(System.currentTimeMillis());
                 nRand = gene.nextInt();
                 t.setString(""+(nRand*10f)%10);
                 display.setCurrent(t);
                }
            else
              if (c == exitCommand) {
                 destroyApp(false);
                 notifyDestroyed();
                }
        }
    
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. L'imaginazione è la vera conoscenza! (A. Einstein)

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

    Re: [J2ME] Problema con il costruttore random()

    Originariamente inviato da mutelg
    Sale mi sto inserendo da poco nel mondo della Java 2 Moblie Edition, ho dei problemi con il costruttore random(), cioè il codice funziona ma forse è un problema matematico, xchè mi genera numeri casuali tra 0 e 10 ma solo pari e avvolte negativi.
    Innanzitutto non ti conviene affatto istanziare ogni volta un nuovo Random e settarne il "seed"! Non verrebbe fuori una "buona" sequenza.
    Istanzia una volta sola il Random nel costruttore della midlet, lo assegni ad una variabile di istanza e poi dal quel punto usi solo più i vari nextXXX.
    Nota che non servirebbe nemmeno settare un seed passando currentTimeMillis(). È la stessa identica cosa che fa già il costruttore senza argomenti di Random!!!

    Secondo la documentazione, nextInt() può fornire qualunque tra i 2^32 possibili valori, quindi ovviamente anche negativi. Se vuoi un numero casuale in un range specifico e ristretto usa un semplice metodo:

    codice:
    public int randomInRange(int min, int max) {
        int diff = max - min + 1;
        int val = rnd.nextInt() % diff;
        return (val < 0 ? -val : val) + min;
    }
    dove 'rnd' è chiaramente la tua variabile di istanza Random. min e max sono inclusivi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Capito grazie tante se non è troppo disturbo, potrsti spiegarmi quale la funzione e come funiziona questa parte di codice che mi hai postato ... grazie ancora!
    Sia ben chiaro nn intendo il return XD solo il resto....

    codice:
    ....
    
    return (val < 0 ? -val : val) + min;
    
    ....
    Imparare è un'esperienza, tutto il resto è solo informazione. L'imaginazione è la vera conoscenza! (A. Einstein)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mutelg
    codice:
    return (val < 0 ? -val : val) + min;
    ? : è l'operatore condizionale (esistente in molti linguaggi).

    a ? b : c

    significa: usa la espressione 'b' se 'a' è true altrimenti usa la espressione 'c'. Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.