ไบนารีถึงทศนิยม

Sep 13 2020

ฉันจะทำให้รหัสนี้เร็วขึ้นและอ่านได้หรือไม่ ฉันเป็นมือใหม่และในภายหลังฉันจะสร้างคลาสอื่นด้วยการแปลงทศนิยมเป็นไบนารี แต่ก่อนอื่นฉันต้องรู้วิธีทำ

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

}
```

คำตอบ

2 MiguelAvila Sep 13 2020 at 09:31

มีสิ่งดีๆที่จะชี้ให้เห็นในโซลูชันของคุณนอกเหนือจากการจัดรูปแบบโค้ด หากคุณใช้ eclipse คุณสามารถกด ctrl + shift + f ซึ่งจะทำให้โค้ดของคุณสามารถทำซ้ำได้มากขึ้น


เป็นวิธีไบนารี

  • ใน Java ค่าที่คุณส่งเป็นพารามิเตอร์จะไม่ได้รับผลกระทบในฟังก์ชันอื่น ๆ (มีข้อยกเว้นบางประการเช่นเดียวกับโหนดโครงสร้างข้อมูล) ดังนั้นคุณสามารถบันทึกinputNumbตัวแปร
  • ตั้งชื่อตัวแปรวิธีการและคลาสของคุณเพื่อสื่อความหมายสำหรับผู้อ่านโค้ดที่เป็นไปได้ทั้งหมด ในอนาคตคุณจะไม่ทำงานคนเดียว
    public static boolean isBinary(int number) {
        while (number > 0) {
            if(number % 10 > 1)
                return false;
            number /= 10;
        }
        return true;
    }

วิธีไบนารีเป็นทศนิยม

  • หากมีการประกาศตัวแปรว่าใช้เพียงครั้งเดียว (เป็นlastDigit) ให้แทนที่ค่าที่กำหนดให้เมื่อตัวแปรดังกล่าวปรากฏขึ้น
  • แสดงความคิดเห็นเมื่อจำเป็น
  • ทิ้งข้อยกเว้นเมื่อคุณพบความไม่สอดคล้องกันซึ่งจะรบกวนขั้นตอนการทำงานที่ถูกต้องของโปรแกรมของคุณ
  • อย่าตรวจสอบเงื่อนไขบูลีนสองครั้งหากif elseคำสั่งขึ้นอยู่กับเงื่อนไขเดียวที่คุณไม่ได้ตรวจสอบว่าสิ่งนั้นไม่เป็นจริงในelseบล็อกหรือไม่มันซ้ำซ้อนและelseจะดำเนินการเมื่อเงื่อนไขifล้มเหลว
    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;
    }

isCorrectวิธีการอาจถูกมองข้ามเพราะมันใช้ครั้งเดียว

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

ฉันหวังว่ามันจะช่วยคุณได้

2 tinstaafl Sep 13 2020 at 21:36

สิ่งหนึ่งที่ฉันสังเกตเห็น ในใจของฉันแล้วเลขฐานสองมักจะแสดงด้วยชุดของตัวเลข (สตริง, ถ่าน [], ไบต์ [] ฯลฯ ) ไม่ใช่จำนวนเต็มที่มีเพียง 0 และ 1 วิธีนี้ไม่เพียง แต่จะเป็นแนวทางทั่วไปมากขึ้นเท่านั้น แต่จะทำให้อัลกอริทึมของคุณง่ายขึ้นอย่างมากเนื่องจากตัวเลขถูกแยกออก

อีกแง่หนึ่งที่ต้องพิจารณาจำนวนเต็มถูก จำกัด ไว้ที่จำนวนหลักในขณะที่โดยทั่วไปแล้วเลขฐานสองสามารถมีได้ 32, 64 หรือ 128 บิต