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

    Conversione da decimale a binario... compito per esame!

    ho un problema con questo esercizio: convertire un numero da decimale a binario! il problema è che quando compilo non mi restituisce il numero "inverso" ovvero letto dalla fine all'inizio! siccome sono alle prime armi non conosco metodi "furbi" per risolvere questo problema quindi ho fatto nel seguente modo:
    ho chiesto all'utente di inserire il numero;
    ho chiesto di confermare se è naturale;
    ho usato l'algoritmo conversione (dividere numero per 2 e stampare il resto);
    ho trasformato il numero intero dei resti in una stringa
    e poi da qui iniziano i problemi
    io ho risolto in questo modo:

    codice:
    class binari{
       public static void main (String [] Args) {
         System.out.println ("inserisci il numero da convertire");
         int num= SavitchIn.readLineInt ();
         System.out.println("b=binario; n=naturale");
         String h=SavitchIn.readLineWord();
         int resto;
    
    
         if (h.equals("n")) {
           System.out.println ("hai inserito un numero naturale");
           do {
    
           resto = num%2;
           num=num/2;
            String s = Integer.toString (resto); 
    
            for (int i=s.length()-1; i>=0; ) {
    
             System.out.print(s.charAt(i));
             i--;}
    
                 }   while(num!=0);
    
         }
       }
    
     }
    ma non funziona... sono due ore che provo e riprovo ma niente... me lo stampa nell'ordine sbagliato!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,479

    Moderazione

    Usa il tag [CODE] per formattare il codice.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Re: Conversione da decimale a binario... compito per esame!

    Originariamente inviato da Stefano92
    codice:
    ...
            String s = Integer.toString (resto); 
    
            for (int i=s.length()-1; i>=0; ) {
    
             System.out.print(s.charAt(i));
             i--;}
    
                 }   while(num!=0);
    
         }
       }
    
     }
    Ogni volta ridefinisci la stringa s alla quale vai ad assegnare l'ultimo resto calcolato.
    In questo modo stampi i resti nell'ordine inverso, ottenendo così l'output non desiderato.

    Dai un'occhiata alla classe StringBuffer.
    Quindi, nel ciclo in cui ti calcoli il numero binario, vai ad aggiungere i resti all'istanza di StringBuffer, poi successivamente stampi la stringa al contrario.

    Se, invece, devi per forza usare la classe String, allora puoi usare l'operatore di concatenamento, andando però ad istanziare più volte gli oggetti di tale classe.
    Ad esempio:
    codice:
    String stringa = "string";
    String altraStringa = "other";
    
    String concatenamento = stringa + altraStringa;

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

    Re: Conversione da decimale a binario... compito per esame!

    Originariamente inviato da Stefano92
    codice:
           do {
    
           resto = num%2;
           num=num/2;
            String s = Integer.toString (resto); 
    
            for (int i=s.length()-1; i>=0; ) {
    
             System.out.print(s.charAt(i));
             i--;}
    
                 }   while(num!=0);
    
         }
       }
    
     }
    resto può valere o 0 o 1 ... e la stringa s è quindi o "0" o "1" ed è abbastanza inutile che fai addirittura una scansione sulla stringa!!

    Un modo veloce e diretto è quello di sfruttare una "maschera" di bit in cui c'è un solo bit a 1. In pratica un valore int che diventa man mano:

    100000....0
    010000....0
    001000....0
    .....

    E con una semplice AND (operatore & ) vedi se il bit i-esimo del tuo numero è 1 o 0 e stampi di conseguenza "1" o "0".

    Altrimenti se vuoi sfruttare il modulo/divisione per 2 (dove chiaramente il resto, che è quello che serve, è nella parte "bassa") puoi sfruttare un buffer di char[] o un StringBuffer oppure concatenare una stringa pre-inserendo il "1"/"0" a sinistra (il primo resto deve contribuire all'ultimo carattere). Quest'ultimo caso non è efficiente ma come esercizio, l'efficienza non dovrebbe essere un problema.
    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.