Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    25

    ciclo infinito in convertitore binario

    Ho scritto questo programmino che dovrebbe convertire un decimale in un numero binario ma entra in un loop infinito con la condizione x >= 0

    (se metto x > 0 oppure x > = 1 -- x > 1 da numeri non esatti ES: 12 è uguale a 100 in binario per lui )

    ECCO IL CODICE ... AIUTO!! GRAZIE IN ANTICIPO


    codice:
    /**
     * PROGRAMMA CHE CONVERTE I NUMERI DECIMALI IN NUMERI BINARI
     * @author Mattia Lonzi
     * @Version 0.1 2012-12-04
     */
    import java.util.Scanner;
    
    public class Binario{
    
        public static void main(String[]args) {
        
        System.out.println("Programma che converte i numeri decimali senza virgola in binario");
        System.out.println("INSERISCI NUMERO");
    
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();
        int ris = x;
        int resto = x % 2;
        
        while(ris >= 0) {
            if(resto == 0) {
                ris = ris / 2;
                resto = ris % 2;
                System.out.print("1");}
            if(resto != 0) {
                ris = ris / 2;
                resto = ris % 2;
                System.out.print("0");}
         }
        
        
        if(x == 0) {
            System.out.println("0");
        }
        
        if(x == 1) {
            System.out.println("1");
        }
            
        if(x < 0) {
            System.out.println("INSERIRE SOLO NUMERI POSITIVI");
        }
    }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    12 in binario è 1100

    codice:
    StringBuffer buffer = new StringBuffer(); 
    while(ris >= 0)
    {
       if (resto == 0){
          buffer.append(0); 
       }else{
          buffer.append(1); 
       }
    
       ris = (int) (ris / 2); // qui il cast è un rafforzativo 
       if ( ris == 1) {
          buffer.append(1); 
          ris = -1; 
       }else{
        resto = ris % 2; 
    }
      
       String temp = buffer.toString(); 
       for (int val = temp.length() - 1; val >= 0; val --){
        System.out.print(temp.charAt(val)); 
     } 
    }

    dovrebbe andare (non l'ho testato)
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    25
    non cè un modo più semplificato?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da MET1515
    non cè un modo più semplificato?
    si, c'è il convertitore della classe Integer, ma suppongo che lo scopo dell'esercizio sia creare un tuo algoritmo di conversione.

    poi non capisco dove è la difficoltà (visto che mi sono limitata ad implementare l'algoritmo di conversione decimale/binario)
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    è sbagliata la condizione ed operi in modo errato all'interno del ciclo , fai tipo:

    codice:
    while(ris > 0) {        
            resto = ris % 2;
            ris/=2;
            System.out.print (resto);
    }
    ma ancora non va bene , in questo modo viene stampato il numero nell'ordine opposto , per scriverlo nell'ordine giusto potresti appoggiarti a uno StringBuilder e al termine del ciclo stampare la stringa da esso ottenuta dopo averla invertita

    codice:
    StringBuilder sb = new StringBuilder ();
    while(ris > 0) {        
            resto = ris % 2;
            ris/=2;
            sb.append (resto);
    }
    System.out.println (sb.reverse ().toString ());

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da zipangulu
    è sbagliata la condizione ed operi in modo errato all'interno del ciclo , fai tipo:

    codice:
    while(ris > 0) {        
            resto = ris % 2;
            ris/=2;
            System.out.print (resto);
    }
    ma in questo modo viene stampato il numero nell'ordine opposto , per scriverlo nell'ordine giusto potresti appoggiarti a uno StringBuilder e al termine del ciclo stampare la stringa da esso ottenuta dopo averla invertita

    codice:
    StringBuilder sb = new StringBuilder ();
    while(ris > 0) {        
            resto = ris % 2;
            ris/=2;
            sb.append (resto);
    }
    ... 
    System.out.println (sb.reverse ().toString ());
    come gliel'ho scritto io funziona (il ciclo), non ho testato il reverse
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Originariamente inviato da valia
    come gliel'ho scritto io funziona (il ciclo), non ho testato il reverse
    Sono arrivato in ritardo


  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    25
    allora le cose stanno così...
    sono ancora un principiante in java non li so usare tutti i comandi...
    a parte le iterazioni, modalità di input, le variabili e altro...sono agli inizi..

    per esempio vorrei spare cosa vuol dire questo x/=2 ...
    l'operatore /= cosa fa di preciso grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Originariamente inviato da MET1515
    per esempio vorrei spare cosa vuol dire questo x/=2 ...
    l'operatore /= cosa fa di preciso grazie
    è la forma abbreviata per scrivere

    codice:
    x = x / 2;

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    25
    hahah semplice non lo sapevo grazie

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.