Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Sylar
    Registrato dal
    May 2007
    Messaggi
    10

    [JAVA] Piccolo aiuto Cicli annidati

    Salve a tutti, sto sviluppando un prog per convertire numeri da esadecimali a binario; come risultato il mio programma restituisce un array contenente in ogni cella i 4 bit corrispondenti alla cifra esadecimale {ES 15 = 0001 (a[0]) 0101 (a[1])}; Quindi mi restituisci il valore
    00010101, io vorrei togliere gli eventuali zeri iniziali come posso fare?
    Ho provato a fare vari cicli annidati, ma per un problema o per un'altro non riesco a venirne a capo; mi potreste venire in soccorso?

    Grazie.
    Il vero signore è simile a un arciere: se manca il bersaglio, ne cerca la causa in se stesso.

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

    Re: [JAVA] Piccolo aiuto Cicli annidati

    Originariamente inviato da Sylar
    Salve a tutti, sto sviluppando un prog per convertire numeri da esadecimali a binario; come risultato il mio programma restituisce un array contenente in ogni cella i 4 bit corrispondenti alla cifra esadecimale {ES 15 = 0001 (a[0]) 0101 (a[1])}; Quindi mi restituisci il valore
    00010101, io vorrei togliere gli eventuali zeri iniziali come posso fare?
    Ho provato a fare vari cicli annidati, ma per un problema o per un'altro non riesco a venirne a capo; mi potreste venire in soccorso?
    Innanzitutto quella che vuoi fare è una conversione abbastanza particolare.
    Dovresti spiegare bene cosa hai in input e cosa devi avere in output. Es: hai in input una stringa che rappresenta un valore esadecimale?? E cosa devi ottenere?
    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 L'avatar di Sylar
    Registrato dal
    May 2007
    Messaggi
    10
    Per farla breve vi riporto il codice:

    public class Convertitore {
    public static void main(String args[]) {

    int esadecimale;
    esadecimale=15;
    int i=0;
    int j =0;
    String s;
    s = Integer.toString(esadecimale);
    String bin[] = new String [s.length()];

    for(i=0; i<s.length(); i++){
    switch(s.charAt(i)){
    case'1':
    bin [i] = "0001";
    break;
    case '2':
    bin[i] = "0010";
    break;
    case '3':
    bin[i] = "0011";
    break;
    case '4':
    bin[i] = "0100";
    break;
    .
    .
    .
    .
    case 'F':
    bin[i] = "1111";
    break;
    }
    }


    for(i=0; i<s.length();i++){
    System.out.print(bin[i]);
    }


    }
    }

    In pratica come input ho una intero esadecimale, che converto in stringa a fini del progetto.
    Ottenuta la stringa per ogni char scrivo in un array i bit corrispondenti a quel carattere (utilizzando un ciclo for), in modo tale che alla fine, dopo aver analizzao tutti i caratteri della mia stringa, nell'array bin avrò l'equivalente dell'input in binario.

    P.S
    In sintesi da un intero in esadecimale devo avere il corrispondente in binario.

    P.S2
    Ho risolto il problema inserendo questa serie di if dopo lo switch; (possibile che non ci sia una soluzione migliore?)

    if (bin[0]=="0001"){
    bin[0]="1";
    }
    if (bin[0]=="0010"){
    bin[0]="10";
    }
    if (bin[0]=="0011"){
    bin[0]="11";
    }
    if (bin[0]=="0100"){
    bin[0]="100";
    }
    if (bin[0]=="0101"){
    bin[0]="101";
    }
    if (bin[0]=="0111"){
    bin[0]="111";
    }
    Il vero signore è simile a un arciere: se manca il bersaglio, ne cerca la causa in se stesso.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Sylar
    int esadecimale;
    esadecimale=15;
    int i=0;
    int j =0;
    String s;
    s = Integer.toString(esadecimale);
    String bin[] = new String [s.length()];

    for(i=0; i<s.length(); i++){
    switch(s.charAt(i)){
    ....
    Scusa ma così non vedo nulla di "esadecimale" ....
    Se proprio vuoi l'esadecimale, allora usa il metodo toString che prende in input anche il 'radix' (da mettere a 16, chiaramente).

    Così non sarebbe meglio?
    codice:
    public class Prova
    {
        public static void main (String[] args)
        {
            int val = 4660;   /* in hex 0x1234 */
    
            String[] arr = toBinStrArray (val);
    
            for (String s : arr)
                System.out.println (s);
        }
    
        public static String[] toBinStrArray (int valore)
        {
            String s = Integer.toBinaryString (valore);
    
            while (s.length () % 4 != 0)
                s = "0" + s;
    
            int n = s.length () / 4;
            String[] arr = new String[n];
    
            for (int i = 0, j = 0; i < n; i++, j+= 4)
                arr[i] = s.substring (j, j+4);
    
            return arr;
        }
    }
    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 L'avatar di Sylar
    Registrato dal
    May 2007
    Messaggi
    10
    Grazie per l'aiuto ;

    Son alle prime armi, e non ho ben capito tutto il tuo codice, cmq se non erro tu come input di partenza hai utilizzato un numero in decimale (4660) convertendolo poi in binario attraverso il metodo toBinStrArray giusto?

    Io invece come input di partenza dovrei utilizzare direttamente un numero in Hex.

    Se ho interpretato male il codice ti prego di spiegarmi.

    Ciao e Grazie ancora!
    Il vero signore è simile a un arciere: se manca il bersaglio, ne cerca la causa in se stesso.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Trovi sempre i metodi nella classe Integer:

    codice:
    String formatobinario = Integer.toBinaryString(Integer.parseInt(esadecimale, 16));
    PS: lavora con le API sottomano.
    http://java.sun.com/javase/6/docs/ap...g/Integer.html
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it L'avatar di Sylar
    Registrato dal
    May 2007
    Messaggi
    10
    OK, grazie a tutti per le risposte, (attendo ancora quella di andbin per aver maggior chiarezza al riguardo) cmq.. andando leggermente OT, come faccio a convertire una stringa in un numero decimale? Con il parseInt giusto? Nel mio caso la stringa è 10100100000000000000000 e provando ad utilizzare tale metodo mi da errore (NumberFormatException )... ho sbagliato qualcosa? Oppure l'errore dipende dall'eccessiva grandezza del numero? come posso rimediare?

    Infine avrei un'altra curiosita, se ho una stringa che rappresenta un num bin, ed avrei intenzione di trasformarla in esadecimale... quali passaggi dovrei eseguire?
    Guardando il javadoc tutti i metodi prendono come input un numero decimale trasformandolo in binario o in esadecimale, ma nessuno esegue l'operazione inversa..

    Grazie in anticipo a tutti coloro che mi risponderanno
    Il vero signore è simile a un arciere: se manca il bersaglio, ne cerca la causa in se stesso.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non so che cosa tu stia facendo... questo va benissimo e nessun problema di formato numero
    codice:
    public static void main (String[] args) {
            String bin = "10100100000000000000000";
            System.out.println(bin+" corrisponde all'intero: "+Integer.parseInt(bin, 2));
            System.out.println(bin+" corrisponde all'HEX: "+ Integer.toHexString(Integer.parseInt(bin, 2)));
        }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Sylar
    OK, grazie a tutti per le risposte, (attendo ancora quella di andbin per aver maggior chiarezza al riguardo)
    Il metodo toBinStrArray() che ho scritto e riportato fa semplicemente 4 cose:
    - Converte il numero in una stringa che contiene la rappresentazione in binario.
    - Visto che toBinaryString() ritorna solamente i bit strettamente necessari (nessun padding ecc...), faccio un ciclo per aggiungere degli '0' davanti nel caso la stringa non fosse lunga un multiplo di 4.
    - Calcolo quanti blocchetti di 4 bit ci sono (adesso la stringa è certamente un multiplo di 4).
    - Alloco l'array e spezzetto la stringa a blocchi di 4 caratteri.

    Un valore passato come 4660 (0x1234) fornisce quindi un array { "0001", "0010", "0011", "0100" }

    Tutto qui. Nota comunque, ma l'ho già detto all'inizio, che questa è una conversione abbastanza particolare per come è il valore di ritorno (un array che contiene stringhe con il binario a blocchi di 4 bit).

    Originariamente inviato da Sylar
    cmq.. andando leggermente OT, come faccio a convertire una stringa in un numero decimale? Con il parseInt giusto? Nel mio caso la stringa è 10100100000000000000000 e provando ad utilizzare tale metodo mi da errore (NumberFormatException )... ho sbagliato qualcosa? Oppure l'errore dipende dall'eccessiva grandezza del numero? come posso rimediare?

    Infine avrei un'altra curiosita, se ho una stringa che rappresenta un num bin, ed avrei intenzione di trasformarla in esadecimale... quali passaggi dovrei eseguire?
    Guardando il javadoc tutti i metodi prendono come input un numero decimale trasformandolo in binario o in esadecimale, ma nessuno esegue l'operazione inversa..
    Innanzitutto tieni sempre bene a portata di ... mouse la documentazione ufficiale delle API di Java.

    Per fare conversioni tra stringhe e numeri (e viceversa) i metodi da tenere presente nella varie classi Integer, Long, ecc.... sono:
    - parseXXX()
    - toString()
    - valueOf()

    più
    - toBinaryString()
    - toHexString()
    - toOctalString(long i)
    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.