Biner ke desimal

Sep 13 2020

Dapatkah saya membuat kode ini lebih cepat dan apakah ini dapat dibaca? Saya seorang pemula dan nanti saya akan membuat kelas lain dengan konversi Desimal ke Biner, tetapi pertama-tama saya harus tahu bagaimana melakukannya.

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

}
```

Jawaban

2 MiguelAvila Sep 13 2020 at 09:31

Ada hal-hal baik yang perlu ditunjukkan dalam solusi Anda selain dari pemformatan kode. Jika Anda menggunakan eclipse, Anda bisa menekan ctrl + shift + f dan itu akan membuat kode Anda lebih bisa diubah.


Apakah Metode Biner

  • Di Java, nilai yang Anda kirim sebagai parameter tidak terpengaruh di fungsi lain (ada beberapa pengecualian seperti pada node struktur data). Karenanya Anda dapat menyimpan inputNumbvariabel
  • Buat nama variabel, metode, dan kelas Anda deskriptif untuk semua kemungkinan pembaca kode Anda. Di masa depan Anda tidak akan bekerja sendiri.
    public static boolean isBinary(int number) {
        while (number > 0) {
            if(number % 10 > 1)
                return false;
            number /= 10;
        }
        return true;
    }

Metode Biner Ke Desimal

  • Jika sebuah variabel dideklarasikan hanya digunakan sekali (sebagai lastDigit), maka gantikan nilai yang diberikan padanya di mana variabel tersebut muncul.
  • Beri komentar bila perlu
  • Lempar pengecualian saat Anda menemukan ketidakkonsistenan yang akan mengganggu alur kerja yang benar dari program Anda
  • Jangan periksa dua kali kondisi boolean, jika sebuah if elsepernyataan hanya bergantung pada satu kondisi Anda belum memeriksa apakah itu tidak benar di elseblok, itu berlebihan, dan elsedieksekusi ketika kondisi ifgagal
    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 isCorrectMetode bisa dihilangkan karena itu digunakan sekali.

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

Saya berharap itu membantu Anda.

2 tinstaafl Sep 13 2020 at 21:36

Satu hal, saya perhatikan. Bagi saya, bilangan biner biasanya diwakili oleh kumpulan digit (string, char [], byte [], dll) bukan integer dengan hanya 0 dan 1. Pendekatan ini tidak hanya lebih umum, tetapi juga akan menyederhanakan algoritme Anda secara signifikan karena digitnya sudah terpisah.

Aspek lain yang perlu dipertimbangkan, integer dibatasi pada jumlah digit, sedangkan bilangan biner biasanya memiliki 32, 64 atau bahkan 128 bit.