İkiliden ondalığa

Sep 13 2020

Bu kodu bir şekilde daha hızlı yapabilir miyim ve bu okunabilir mi? Ben bir acemiyim ve daha sonra Ondalıktan İkiye dönüştürme ile başka bir sınıf yapacağım, ancak önce bunu nasıl yapacağımı bilmeliyim.

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

}
```

Yanıtlar

2 MiguelAvila Sep 13 2020 at 09:31

Çözümünüzde kod biçimlendirmesinin yanı sıra dikkat çekmeniz gereken güzel şeyler var. Tutulmayı kullanırsanız, ctrl + shift + f tuşlarına basabilirsiniz ve bu, kodunuzu daha yeniden kullanılabilir hale getirir.


İkili Yöntemdir

  • Java'da, parametre olarak gönderdiğiniz değerler diğer işlevlerden etkilenmez (veri yapıları düğümlerinde olduğu gibi bazı istisnalar vardır). Böylece inputNumbdeğişkeni kaydedebilirsiniz
  • Değişkenlerinizin, yöntemlerinizin ve sınıflarınızın adını, kodunuzun olası tüm okuyucuları için açıklayıcı yapın. Gelecekte yalnız çalışmayacaksın.
    public static boolean isBinary(int number) {
        while (number > 0) {
            if(number % 10 > 1)
                return false;
            number /= 10;
        }
        return true;
    }

İkiliden Onluya Yöntemi

  • Bir değişken yalnızca bir kez (as lastDigit) kullanılmış olarak bildirilirse , bu değişkenin göründüğü yere atanan değeri değiştirin.
  • Gerektiğinde yorum yapın
  • Programınızın doğru iş akışına müdahale edecek bir tutarsızlık bulduğunuzda istisnalar atın
  • Bir boole koşulunu iki kez kontrol etmeyin, eğer bir if elseifade sadece bir koşula bağlıysa else, bunun blokta doğru olup olmadığını kontrol etmek zorunda değilsiniz , fazlalıktır, elseve koşul ifbaşarısız olduğunda çalıştırılır.
    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;
    }

isCorrectBir kere kullanıldıktan sonra beri yöntem ihmal edilebilir.

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

Keşke sana yardımcı olsaydı.

2 tinstaafl Sep 13 2020 at 21:36

Bir şey fark ettim. Bana göre bir ikili sayı genellikle sadece 0 ve 1'lere sahip bir tamsayı değil, bir rakamlar koleksiyonuyla temsil edilir (dize, karakter [], bayt [], vb.). Bu yaklaşım yalnızca daha tipik olmakla kalmaz, rakamlar zaten ayrılmış olduğundan algoritmanızı önemli ölçüde basitleştirir.

Dikkate alınması gereken bir başka yön, bir tamsayı basamak sayısıyla sınırlıdır, halbuki ikili bir sayı tipik olarak 32, 64 veya hatta 128 bit olabilir.