Binario a decimal

Sep 13 2020

¿Puedo hacer este código de alguna manera más rápido y es legible? Soy un principiante y luego haré otra clase con conversión de decimal a binario, pero primero tengo que saber cómo hacerlo.

package convert.console.binaryToDecimal;
import java.util.InputMismatchException;
import java.util.Scanner;

public class ConversionProgram {
    //check if number is actually binary
    public static boolean isBin(int numb){
        int inputNumb = numb;

        while(inputNumb > 0){
            if(inputNumb % 10 > 1){
                return false;
            }
            inputNumb /= 10;
        }
        return true;
    }

    public static int binaryToDecimal(int input){

        int number = input;
        int decimalNumber = 0;
        int baseNumber = 1;
        int lastDigit;
        //check if provided number is binary
        if(isBin(number)){
            while(number != 0){

                //takes last digit from input
                lastDigit = number % 10;
                //counts decimal number
                decimalNumber += lastDigit * baseNumber;
                /*every time increase baseNumber by 2
                (base number is 1 ,because when u start from right 2pow0 is always 1)
                 */
                baseNumber *= 2;
                //removes last digit from input
                number /= 10;

            }
        }
        else if(!isBin(number)){
            System.out.println("Wrong!\nProvide binary number - contains only 0 and 1");
        }
        return decimalNumber;
    }

    //check if output is correct
    public static void isCorrect(int bin, int conv){

            if (conv == 0) {
                System.out.println("Try again");
            } else {
                System.out.println("Converted number from binary " + bin + " to decimal is " + conv);
            }
    }



    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Input binary number :");
        try {

            int binaryNumb = input.nextInt();
            int convertedNumb = binaryToDecimal(binaryNumb);
            isCorrect(binaryNumb, convertedNumb);

        }catch(InputMismatchException e){
            System.out.println("Wrong input!");
        }
    }

}
```

Respuestas

2 MiguelAvila Sep 13 2020 at 09:31

Hay cosas buenas que señalar en su solución además del formato del código. Si usa eclipse, puede presionar ctrl + shift + f y eso hará que su código sea más legible.


Es el método binario

  • En Java, los valores que envía como parámetros no se ven afectados en otras funciones (hay algunas excepciones como con los nodos de estructuras de datos). Por lo tanto, puede guardar la inputNumbvariable
  • Haga que el nombre de sus variables, métodos y clases sea descriptivo para todos los posibles lectores de su código. En el futuro, no trabajará solo.
    public static boolean isBinary(int number) {
        while (number > 0) {
            if(number % 10 > 1)
                return false;
            number /= 10;
        }
        return true;
    }

Método binario a decimal

  • Si una variable se declara y solo se usa una vez (como lastDigit), sustituya el valor que se le asignó donde aparezca dicha variable.
  • Haga comentarios cuando sea necesario
  • Lanza excepciones cuando encuentres una inconsistencia que interferirá con el flujo de trabajo correcto de tu programa.
  • No verifique dos veces una condición booleana, si una if elsedeclaración depende solo de una condición, no debe verificar si eso no era cierto en el elsebloque, es redundante, y elsese ejecuta cuando la condición iffalla
    public static int binaryToDecimal(int number) {
        int decimalNumber = 0;
        int powerOfTwo = 1; //renamed, gives more context
        if (isBinary(number)) {
            while (number != 0) {
                decimalNumber += (number % 10) * powerOfTwo;
                powerOfTwo *= 2;
                number /= 10; //removes the last digit
            }
        } else throw new InvalidParameterException("Not a binary number");
        return decimalNumber;
    }

El isCorrectmétodo podría omitirse ya que se usa una vez.

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a binary number: ");
        try {
            int binaryNumb = input.nextInt();
            int convertedNumb = binaryToDecimal(binaryNumb);
            System.out.println("The number "+ binaryNumb + " was converted to decimal," +
                    "\nthe result was: " + convertedNumb);
        } catch (InputMismatchException e) {
            System.out.println("Wrong input!");
        }
    }

Ojalá te fuera de ayuda.

2 tinstaafl Sep 13 2020 at 21:36

Una cosa, me di cuenta. En mi opinión, un número binario generalmente se representa mediante una colección de dígitos (cadena, char [], byte [], etc.), no un número entero con solo 0 y 1. Este enfoque no solo sería más típico, sino que simplificaría significativamente su algoritmo, ya que los dígitos ya están separados.

Otro aspecto a considerar, un número entero está restringido al número de dígitos, mientras que un número binario normalmente puede tener 32, 64 o incluso 128 bits.