Binaire à décimal

Sep 13 2020

Puis-je rendre ce code plus rapide et est-ce lisible? Je suis un débutant et plus tard, je ferai une autre classe avec la conversion décimale en binaire, mais je dois d'abord savoir comment faire cela.

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!");
        }
    }

}
```

Réponses

2 MiguelAvila Sep 13 2020 at 09:31

Il y a de bonnes choses à souligner dans votre solution en dehors du formatage du code. Si vous utilisez eclipse, vous pouvez appuyer sur ctrl + shift + f et cela rendra votre code plus redable.


Est la méthode binaire

  • En Java, les valeurs que vous envoyez en tant que paramètres ne sont pas affectées dans les autres fonctions (il existe quelques exceptions comme pour les nœuds de structures de données). Par conséquent, vous pouvez enregistrer la inputNumbvariable
  • Rendez le nom de vos variables, méthodes et classes descriptif pour tous les lecteurs possibles de votre code. À l'avenir, vous ne travaillerez plus seul.
    public static boolean isBinary(int number) {
        while (number > 0) {
            if(number % 10 > 1)
                return false;
            number /= 10;
        }
        return true;
    }

Méthode binaire à décimale

  • If a variable is declared an only used once (as lastDigit), then substitute the value assigned to it where such variable appears.
  • Make comments when needed
  • Throw exceptions when you find an inconsistency which will interfere with the correct workflow of your program
  • Don't check twice a boolean condition, if an if else statement depends on only one condition you haven't to check if that wasn't true in the else block, it is redundant, an else is executed when the condition in the if fails
    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;
    }

The isCorrect method could be omitted since it's used once.

    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!");
        }
    }

I wish it were of help to you.

2 tinstaafl Sep 13 2020 at 21:36

Une chose, j'ai remarqué. À mon avis, un nombre binaire est généralement représenté par une collection de chiffres (chaîne, char [], octet [], etc.) et non un entier avec seulement des 0 et des 1. Non seulement cette approche serait plus typique, mais elle simplifierait considérablement votre algorithme puisque les chiffres sont déjà séparés.

Autre aspect à considérer, un entier est limité au nombre de chiffres, alors qu'un nombre binaire peut généralement avoir 32, 64 ou même 128 bits.