sábado, 16 de julio de 2011

Convertir de decimal a hexadecimal en Java

_____________________________________________________________________________________
Este programa recibe un número entero decimal y lo convierte a notación hexadecimal. Hacer esta conversión es relativamente fácil. En el programa se incluyen comentarios de documentación. Una introducción a los números hexadecimales aparece en Esta entrada. Una tabla de equivalencias entre números en notación decimal, binario, octal y hexadecimal, aparece en Ésta página
_____________________________________________________________________________________

Este código debe guardarse con el nombre UsaConvertirHexadecimal.java

import java.util.Scanner;

public class UsaConvertirHexadecimal

{   // Abre clase UsaConvertirHexadecimal

public static void main( String args[])
{    // Abre main

System.out.print("\nEste programa convierte de decimal a ");
System.out.print("hexadecimal. \n");
Scanner entrada = new Scanner(System.in);
ConvertirHexadecimal miObjeto = new ConvertirHexadecimal();
int numero;

System.out.print("\nPor favor introduzca un numero ");
System.out.println("y se imprimira su equivalente en Hexadecimal: ");
numero = entrada.nextInt();

miObjeto.Hexadecimal( numero );

}    // Cierra main
}   // Cierra clase UsaConvertir


El siguiente código debe guardarse con el nombre ConvertirHexadecimal.java

public class ConvertirHexadecimal
 {    // Abre clase ConvertirHexadecimal 
 // La variable Tamano controla el numero de 
 // simbolos que se requieren para hacer la conversion
 // Para llevar un registro de los simbolos se usa un
 // arreglo. Estos se deben guardar porque se van generando
 // de derecha a izquierda, pero la impresion es de 
 // izquierda a derecha.
 private int Tamano = 35;
 private int[] a = new int[Tamano];

 /////////////////////////////
 // METODO HEXADECIMAL
 /////////////////////////////

 public void Hexadecimal ( int x )
 {     // Abre metodo Hexadecimal

 // El arreglo se llena con 0 
 for ( int i = 0; i < Tamano; i++ )
 {  // Abre for
 a[i] = 0;
 }  // Cierra for
 System.out.print("\nAqui esta el numero en notacion ");
 System.out.println("hexadecimal: ");
 int contador = 0; 
 while ( 0 != x )
 {       // Abre while
 
 // Si el  numero no es multiplo de 16
 // lo cual es lo mas probable (por eso
 // se coloca primero esta condicion)
 if ( 0 != x % 16 )
 {   // Abre if
 // Se imprime el residuo de la division
 //Imprimir( x % 16 );
 a[contador++] = x % 16;
 // Ahora x es x - residuo 
 x -= x % 16;  
 // Ahora se divide x entre 16
 x /= 16;
 }   // Cierra if
 // De lo contrario
 // Esto es, si x es multiplo de 16
 else
 {     // Abre else
 // System.out.print("0");
 a[contador++] = 0;
 
 //Ahora x es x/16
 x /= 16;
 }     // Cierra else
 }     // Cierra while
 System.out.println("\n");
 // El numero en notacion hexadecimal, que se ha
 // guardado en el arreglo a se manda a imprimir 
 Imprimir();
 }     // Cierra metodo Hexadecimal
      

 ///////////////////////////////////
 //METODO IMPRIMIR
 ///////////////////////////////////
 public void Imprimir(  )
 {      // Abre metodo Imprimir
 // El arreglo se imprime de la ultima posicion
 // a la primera. Sin embargo, es muy probable 
 // que las ultimas sean 0. Como estan a la derecha
 // no es necesario imprimirlos. La variable estatus
 // inicia con "afuera", lo cual indica que los ceros 
 // no deben imprimirse
 String estatus = "afuera";
 
 for ( int i = Tamano - 1; i >= 0; i-- )
 switch ( a[i] )
 {       // Abre switch
 case 0:
 if ( "adentro" == estatus )
 System.out.printf("0");
 break;
 case 1:
 System.out.printf("1");
 estatus = "adentro";
 break;
 case 2:
 System.out.printf("2");
 estatus = "adentro";
 break;
 case 3:
 System.out.printf("3");
 estatus = "adentro";
 break;
 case 4:
 System.out.printf("4");
 estatus = "adentro";
 break;
 case 5:
 System.out.printf("5");
 estatus = "adentro";
 break;
 case 6:
 System.out.printf("6");
 estatus = "adentro";
 break;
 case 7:
 System.out.printf("7");
 estatus = "adentro";
 break;
 case 8:
 System.out.printf("8");
 estatus = "adentro";
 break;
 case 9:
 System.out.printf("9");
 estatus = "adentro";
 break;
 case 10:
 System.out.printf("A");
 estatus = "adentro";
 break;
 case 11:
 System.out.printf("B");
 estatus = "adentro";
 break;
 case 12:
 System.out.printf("C");
 estatus = "adentro";
 break;
 case 13:
 System.out.printf("D");
 estatus = "adentro";
 break;
 case 14:
 System.out.printf("E");
 estatus = "adentro";
 break;
 case 15:
 System.out.printf("F");
 estatus = "adentro";
 break;
 default:
 System.out.printf("ERROR. EL PROGRAMA ESTA MAL");
 break;
 }       // Cierra switch
 // Es probable que se haya introducido el numero 0
 // y en este caso la variable estatus permanecio
 // como "afuera" y no se imprimio el 0.
 if ( "afuera" == estatus )
 System.out.printf("0");

 System.out.println("\n");
 }      // Cierra metodo Imprimir  
 }    // Cierra clase Convertir

3 comentarios:

  1. porque a miObjeto.Hexadecimal( numero ); se le pone .Hexadecimal no entiendo ademas me lo marca mal

    ResponderEliminar
    Respuestas
    1. Mira. En main definimos un objeto llamado miObjeto de la clase ConvertirHexadecimal. La línea miObjeto.Hexadecimal(numero) hace referencia al método Hexadecimal de dicha clase. El número, desde luego, es el que se ha de convertir de decimal a hexadecimal. Acabo de copiar y ejecutar de nuevo el programa y a mi no me marca ningún error. Cópialo tal cual aparece y ponle los nombres con los que aparecen las clases: UsaConvertirHexadecimal.java y ConvertirHexadecimal.java

      Eliminar

Related Posts Plugin for WordPress, Blogger...