Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Dubbio codice java

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232

    Dubbio codice java

    L'altra volta stavo facendo un esercizio su java e dovevo creare una matrie di stringhe con lettere casuali tra g e m il codice funzione è ho usato:
    codice:
    (char) ((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
    Però qst istruzione di lettere casuali nn l'ho capita bene bene quegli int sarebbero i valori in unicode dei caratteri???!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    in java i caratteri (il tipo primitivo char) è rappresentato come una stringa di informazioni UNICODE lunga 16 bit in cui i valori da 0 a 255 mappano comunque l'intero alfabeto e caratteri speciali. Ora ci si trova in una situazione in cui il valore di una variabile intera (4 byte) quando assume valori da 0 a 255 coincida con quello mappato da UNICODE (hai l'equivalenza insomma). Per questo motivo quel codice da te postato funziona, per questo motivo è facile che trovi switch (fino a java 6, da java7 puoi switchare su stringhe) in cui la condizione testata è un char (lo mappa su intero insomma).

    Spero di essere stata chiara

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    insomma xD... di più volevo sapere il significato del codice... tipo per esempio perchè gli int oppure la 'g' prima di Math.random e poi tra parentesi qll sottrazione cose del genere. Anche se la storia dei caratteri la conoscevo già ma grz lo stesso ^^

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

    Re: Dubbio codice java

    Originariamente inviato da 5t4rdu5t
    Però qst istruzione di lettere casuali nn l'ho capita bene bene quegli int sarebbero i valori in unicode dei caratteri???!!
    Sì, il char è poi semplicemente, alla fin fine, un tipo numerico come gli altri short, int ecc.. Solo con un significato più particolare (rappresenta un carattere) e con un range specifico essendo unsigned 0...65535.

    Quindi es.

    char c = 'A';

    char c = 65;

    int num = 65;
    char c = (int) num;

    sono la stessa identica cosa. Ovvero il carattere ha codice 65 e secondo lo standard ASCII e poi Unicode (che ingloba ASCII come base) vi è mappata la lettera "A".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    codice:
    (char) ((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
    guardalo pezzo per pezzo (e poi vediamo che significa).

    (char) indica il tipo di ritorno, ti impone di trattarlo come carattere
    se questo è chiaro passiamo al resto

    codice:
    ((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
    e ti consiglio di partire dalla parte più interna

    ((int) 'm' -(int) 'g'+1))
    tu vuoi qualcosa che vada da 'g' ad 'm', per cui ti serve IMPORRE un intervallo entro il quale contenere il tuo numero random. Devi partire dal successivo di g e fermarti ad m, siccome in numeri m > g e l'intervallo deve essere un valore intero, ergo m - g.
    potevi benissimo fare anche
    codice:
    int emme = (int) 'm';
    int gi = (int) 'g'; 
    Math.random() * (emme - gi + 1)
    ottenendo lo stesso result (che magari era un po' meno ostico da leggere.

    La regola generele per generare numeri random vuole

    Math.random() * interval

    dove interval spesso è qualcosa del tipo

    int interval = max - min ;

    Spesso min = 0 max = 1 quindi hai un numero puro random (anche se qualcuno potrebbe obiettare su questa affermazione).
    Il +1 indica che gi non lo comprendi nell'intervallo.

    infine

    codice:
    ((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
    la somma: se non la metti prendi solo un numero random che si ferma a emme, dovendo andare da gi ad emme devi includere il punto di partenza.
    Probabile (e fai un test) che quel codice sia equivalente a

    codice:
    Math.random()* ((int) 'm' -(int) 'g'));

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    Ehiiiii valia... una bella spiegazione!!! grz!

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.