domingo, 4 de septiembre de 2011

Como Programar en Java: Ejercicio 4.31

Aquí esta el ejercicio 4.31 de Como Programar en Java séptima edición.

package com.jlm.ccb.ejercicios.capitulo4;

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * Clase encargada de convertir un número
 * binario a un número decimal.
 * Ejercicio 4.31
 * @author LorettoTG
 * @version 1.0
 */
public class Binario {
    /**
     * Método encargado de convertir el número binario
     * a un número decimal.
     */
    public void convertir() {
        //Se crea un objeto Scanner para obtener la entrada
        //de datos del usuario.
        Scanner entrada = new Scanner(System.in);
        int entero = 0;
        System.out.println("Ingrese un número " 
                + "compuesto solo de 0s y 1s");

        //Es el bloque de código donde se prevé que se 
        //genere una excepción. Es como si dijésemos 
        //"intenta estas sentencias y mira a ver si
        //se produce una excepción". El bloque try 
        //tiene que ir seguido, al menos, por una 
        //cláusula catch o una cláusula finally
        try {
            entero = entrada.nextInt(2);
            System.out.println(entero);
        } //Es el código que se ejecuta cuando se produce la excepción.
            //Es como si dijésemos "controlo cualquier excepción que
        //coincida con mi argumento"
        catch (InputMismatchException exception) {
            System.out.println("No ingreso un"
                    + " entero de solo digitos 0 y 1");
        }

        System.out.println("Ingrese otro número "
                + "compuesto solo de 0s y 1s");
        try {
            entero = entrada.nextInt(2);
            //Se convierte a un binario ya que cuando lo 
            //recibimos lo convierte
            //a un entero decimal en automático, después 
            //lo convierte en un entero.
            int enteroBinario = 
                    Integer.valueOf(Integer.toBinaryString(entero));
            int numeroConvertido = 0;
            int contador = 0;
            //En el caso del ciclo while: Primero se evalúa 
            //la condición de entrada
            //si es verdadera ejecuta las sentencias en su cuerpo, 
            //luego vuelve a
            //verificar la condición de entrada y hasta que sea 
            //falsa sale del ciclo.
            while (enteroBinario > 0) {
                numeroConvertido += (enteroBinario % 10) 
                        * (int) Math.pow(2, contador);
                contador ++;
                enteroBinario = enteroBinario / 10;
            }
            System.out.println(numeroConvertido);
        } catch (InputMismatchException exception) {
            System.out.println("No ingreso un entero " 
                    + "de solo digitos 0 y 1");
        } catch (NumberFormatException exception) {
            System.out.println("Hubo un problema en la conversión");
        }
    }

    /**
     * Punto de entrada a la clase y a la aplicación.
     * @param args matriz de argumentos de cadena.
     */
    public static void main(String[] args) {
        Binario binario = new Binario();
        binario.convertir();
    }
}

No hay comentarios:

Publicar un comentario