Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Numeri Random

  1. #1

    Numeri Random

    stavo facendo un piccolo esercizio e mi è venuto in mente di creare la matricola degli studenti in maniera random.
    ho usato Math.random:
    codice:
    package esercizi_ereditarieta;
    
    public class Studenti extends Persona {
        String scuola;
        int matricola;
    
        public Studenti(String nome, String cognome, String mail, String nascita){
            super(nome, cognome, mail);
            this.scuola=nascita;
        }
    
        public int generaMt(){
            return matricola=(int)Math.random();
        }
    
        public String Stampa(){
            return super.Stampa()+"\n"+"Scuola: "+scuola+"\n"+"Matricola: "+generaMt();
        }
    }
    il problema è che quando vado a eseguire il programma come matricola mette sempre 0.
    dove sbaglio??

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

    Re: Numeri Random

    Originariamente inviato da fermat
    codice:
    return matricola=(int)Math.random();
    il problema è che quando vado a eseguire il programma come matricola mette sempre 0.
    dove sbaglio??
    public static double random()
    Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    nn ho capito moltissimo però ho modificato come segue:
    codice:
    package esercizi_ereditarieta;
    
    public class Studenti extends Persona {
        String scuola;
        double matricola;
    
        public Studenti(String nome, String cognome, String mail, String nascita){
            super(nome, cognome, mail);
            this.scuola=nascita;
        }
    
        public double generaMt(){
            return matricola=Math.random()*100;
        }
    
        public String Stampa(){
            return super.Stampa()+"\n"+"Scuola: "+scuola+"\n"+"Matricola: "+generaMt();
        }
    }
    a questo punto funziona perchè mi da sempre un numero diverso, però con la virgola.
    io lo vorrei senza virgola.....

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    nn ho capito moltissimo
    Non c'è molto da capire ..... di un numero double tra 0.0 e 1.0 escluso il cast a int tronca ma ovviamente non arrivando mai a 1.0 (max 0.99999....9) ottieni sempre un int 0!!

    Originariamente inviato da fermat
    io lo vorrei senza virgola.....
    Prima moltiplica per N es. 100, poi dopo, del risultato di questa moltiplicazione, ne fai il cast a int.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ma perchè non usi la classe Random del package java.util?

    eccoti un esempio fatto in 5 min

    codice:
    import java.util.Random;
    /**
     * Progetto d'esempio sulla generazione di numeri casuali e loro, se ripetuti, eventuale sostituzione.
     * @author Naruto 92
     */
    
    /*per i numeri con virgola si userà nextDouble o nextFloat
    per i booleani nextBoolean
    per gli int nextInt
    per i byte nextByte
    per i long nextLong
    per info vedere la javadoc della classe Random, nel package java.util*/
    public class Numeri
    {
        private int vett[]=new int[10];
        private Random rnd=new Random();
        /**
         * Carico il vettore di numeri casuali tra 1 e 20
         */
        public void caricaNumeri(){
            for(int i=0; i<vett.length; i++){
                vett[i]=rnd.nextInt(20)+1;
            }
        }
        /**
         * Elimino eventuali ripetizioni sostituendole con nuovi numeri
         */
        public void aggiusta(){
            int cont=0;
            for(int i=0; i<vett.length-1; i++){
                for(int j=i+1; j<vett.length; j++){
                    if(vett[i]==vett[j]){
                        vett[j]=rnd.nextInt(20)+1;
                    }else{
                        cont++;
                    }
                }
            }
            cont-=35;
            if(cont<vett.length){
                aggiusta();
            }
        }
        /**
         * Ritorna un numero intero compreso tra 0 e 9
         * @return un numero tra 0 e 9
         */
        public int getNumeroIntero(){
            return rnd.nextInt(); 
        }
        /**
         * Ritorna un numero intero compreso inizio e fine
         * @return un numero compreso tra inizio e fine
         * @param inizio l'inizio dell'intervallo
         * @param fine la fine dell'intervallo
         */
        public int getNumeroIntero(int inizio, int fine){
            return rnd.nextInt(fine - inizio) + inizio;
        }
        /**
         * Stampo il vettore
         */
        public void stampa(){
            for(int i=0; i<vett.length; i++){
                System.out.print(vett[i] + "\t");
            }
            System.out.println("\n");
        }
        /**
         * Avvio del programma
         * @param argv vettore di stringhe passato in automatico dall'OS
         */
        public static void main(String argv[]){ 
            Numeri e=new Numeri();
            e.caricaNumeri();
            e.stampa();
            e.aggiusta();
            e.stampa();
        }
    }

  6. #6
    Ti consiglio, dopo il cast ad int, di salvare tutto in una variabile di tipo String. La matricola, come informazione è una stringa e non un numero: in senso algebrico, cioè non ci fai operazioni matematiche su una matricola. Ok?

    Ciao.
    Think global, act local.

  7. #7
    ok per ora ho risolto cosi:
    codice:
        public double generaMt(){
            matricola=Math.random()*100;
            int numero=(int)matricola;
            return numero;
        }
    l'unico fastidio ancora è che in numeri me li da sempre come 84.0, 67.0, 32.0.....
    vorrei levare quelo .0

    @naruto: per me è ancora un pò complicato quel modo.
    @index: come faccio a salvare tutto in una stringa?? cioè quello già è un double che "trasformo" in int, come faccio a tramutare tutto in stringa??

  8. #8
    boh, a me sembra molto più semplice
    per esempio:

    rnd.nextInt() //ti genera un numero casuale tra 0 e 9
    rnd.nextInt(20) //ti genera un numero casuale tra 0 e 19
    rnd.nextInt(30)+1 //ti genera un numero casuale tra 1 e 30

    rnd è un oggetto di classe Random, mentre il metodo nextInt ritorna un intero.

    per fare il cast in stringa puoi procedere in tre modi:

    String s= "" + numero (sfruttando la concatenazione)
    String s=Integer.toString(numero)
    String s=(String)numero
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  9. #9
    Originariamente inviato da Naruto 92
    boh, a me sembra molto più semplice
    per esempio:

    rnd.nextInt() //ti genera un numero casuale tra 0 e 9
    rnd.nextInt(20) //ti genera un numero casuale tra 0 e 19
    rnd.nextInt(30)+1 //ti genera un numero casuale tra 1 e 30

    rnd è un oggetto di classe Random, mentre il metodo nextInt ritorna un intero.

    per fare il cast in stringa puoi procedere in tre modi:

    String s= "" + numero (sfruttando la concatenazione)
    String s=Integer.toString(numero)
    String s=(String)numero
    Bravissimo Naruto92!
    Think global, act local.

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da fermat
    ok per ora ho risolto cosi:
    codice:
        public double generaMt(){
            matricola=Math.random()*100;
            int numero=(int)matricola;
            return numero;
        }
    l'unico fastidio ancora è che in numeri me li da sempre come 84.0, 67.0, 32.0.....
    vorrei levare quelo .0
    Finché continui a restituire un double.... Guarda il tipo del valore di ritorno convertire un int in un double non porta perdita di informazione, la tua variabile viene quindi "promossa" al tipo del valore di ritorno senza dare errori a compilazione (come invece accadrebbe facendo il contrario).
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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