import java.util.Scanner;

public class NumberConversionSystems {

    public static void main(String[] args) {

        //String binary = toBinaryString(number);
        Scanner input = new Scanner(System.in);

        System.out.println("Number Conversion Systems \n");

        // Display the menu
        System.out.println("1.\t Decimal to Binary");
        System.out.println("2.\t Decimal to Hexadecimal");
        System.out.println("3.\t Binary to Decimal");
        System.out.println("4.\t Hexadecimal to Decimal \n");
        System.out.println("Your choice?");

        //Get user's choice
        int choice = input.nextInt();

        switch (choice) {
            case 1: System.out.println("\nEnter Decimal Number"); 
       break;
            case 2: System.out.println("\nEnter Decimal Number");
                    break;
            case 3: System.out.println("\nEnter Binary"); 
                    break;
            case 4: System.out.println("\nEnter Hexadecimal"); 
                     break;
            default: 
                System.out.println("\nInvalid choice. Please choose a number between 1 and 4.");
                choice = input.nextInt();
            break;

        }

        if (choice == 1) {
            int number = input.nextInt();
            String binary = toBinaryString(number);
            binary = recursive(number);
            System.out.printf("Decimal to Binary (%d) = %s", number, binary);   
        }

        else if (choice == 2) {
            int number2 = input.nextInt();
            String hexadecimal = toHexString(number2);
            hexadecimal = recursiveDecHex(number2);
            System.out.printf("Decimal to Hexadecimal (%d) = %s ", number2, hexadecimal);
        }

        else if (choice == 3 ) {
            String binary2 = input.next();
            int decimal = toDecimalUsingParseInt(binary2);
            decimal = recursiveBin(binary2);
            System.out.printf("\n2. Binary to decimal - recursive(%s) = %d ", binary2, decimal);
        }

        else {
            String hex = input.next();
            int decimal = toHexUsingParseInt(hex);
            decimal = recursiveHexDec(hex);
            System.out.printf("Hexadecimal to Decimal (%s) = %d ", hex, decimal);   
        }

        input.close();
    }

    private static String toBinaryString(int number) {
        return Integer.toBinaryString(number);
    }

    private static String toHexString(int number) {
        return Integer.toHexString(number);
    }

    private static int toDecimalUsingParseInt(String binaryNumber) {
        return Integer.parseInt(binaryNumber, 2);
    }

    private static int toHexUsingParseInt(String number) {
        return Integer.parseInt(number, 16);
    }

    private static String recursive(int number) {
        StringBuilder builder = new StringBuilder();

        if (number > 0) {
            String binaryNumber = recursive(number / 2);
            int digit = number % 2;
            builder.append(binaryNumber + digit);
        }
        return builder.toString();
    }

    private static String recursiveDecHex(int number) {
        StringBuilder builder = new StringBuilder();
        if (number > 0) {
            String hexNumber = recursiveDecHex(number / 16);
            String hexCode = "0123456789ABCDEF";
            int hexDigit = number % 16;
            builder.append(hexNumber + hexCode.charAt(hexDigit));
        }
        return builder.toString();
    }

    private static int recursiveBin(String binaryNumber) {
        int decimal = 0;
        int length = binaryNumber.length();
        if (length > 0) {
            String substring = binaryNumber.substring(1);
            int digit = Character.getNumericValue(binaryNumber.charAt(0));
            decimal = digit * (int) Math.pow(2, length - 1) + recursiveBin(substring);
        }
        return decimal;

    }

    private static int recursiveHexDec(String hexNumber) {
        int decimal = 0;
        String hexCode = "0123456789ABCDEF";
        hexNumber = hexNumber.toUpperCase();
        int length = hexNumber.length();
        if (length > 0) {
            char ch = hexNumber.charAt(0);
            int digit = hexCode.indexOf(ch);
            String substring = hexNumber.substring(1);
            decimal = digit * (int) Math.pow(16, length - 1) + recursiveHexDec(substring);
        }
        return decimal;
    }
    }

जब मैं एक अमान्य संख्या (संख्या जो 1 और 4 के बीच में नहीं है) चुनता हूं, तो प्रोग्राम "अमान्य विकल्प" दिखाएगा। कृपया 1 और 4 के बीच एक संख्या चुनें, और जब मैं एक < दर्ज करता हूं। मजबूत>वैध नंबर के बाद, प्रोग्राम चलना बंद हो जाता है।

यह मुझे दशमलव संख्या दर्ज करने के लिए नहीं कहता है, उदाहरण के लिए, मैं '1' चुनता हूं। मुझे किसकी याद आ रही है?

0
fatind 4 नवम्बर 2017, 04:48

3 जवाब

सबसे बढ़िया उत्तर

आपके पास कोई लूप नहीं है, जहां आप इसे बार-बार कोशिश करते हैं जब तक कि एक वैध संख्या दर्ज न हो जाए।

इसको आजमाओ:

int choice = -1;
        while (choice < 0 || choice > 4) {
            choice = input.nextInt();

            switch (choice) {
                case 1:
                    System.out.println("\nEnter Decimal Number");
                    break;
                case 2:
                    System.out.println("\nEnter Decimal Number");
                    break;
                case 3:
                    System.out.println("\nEnter Binary");
                    break;
                case 4:
                    System.out.println("\nEnter Hexadecimal");
                    break;
                default:
                    System.out.println("\nInvalid choice. Please choose a number between 1 and 4.");
                    break;

            }
        }

लेकिन ध्यान रखें कि एक सही संख्या दर्ज करने के बगल में लूप से कोई पलायन नहीं होता है।

0
IEE1394 4 नवम्बर 2017, 04:58

आप स्विच के डिफ़ॉल्ट में एक नई प्रविष्टि की प्रतीक्षा कर रहे हैं। तो यह तब तक वहीं बैठता है जब तक आप एक को अंदर नहीं डालते।

स्विच से पहले आप उस हिस्से को अधिक आसानी से कर सकते हैं:

boolean badEntry = true;
    do{
    System.out.println("Your choice?");
    int choice = input.nextInt();
    if (( choice<1 )|| (choice>4)) {
      System.out.println("\nInvalid choice. Please choose a number between 1 and 4.");
    } else {
      badEntry = false;
    }
      }
    while (badEntry);
0
JeffBship 4 नवम्बर 2017, 04:59

आपका कार्यक्रम बंद नहीं होता है। आपके द्वारा मान्य संख्या दर्ज करने के बाद यह वास्तव में इनपुट की प्रतीक्षा कर रहा है। यदि आप मुझ पर विश्वास नहीं करते हैं, तो आपके द्वारा मान्य विकल्प दर्ज करने के बाद अन्य नंबर दर्ज करने का प्रयास करें। मेरे लिए, इसने कुछ इस तरह काम किया।

Number Conversion Systems 

1.   Decimal to Binary
2.   Decimal to Hexadecimal
3.   Binary to Decimal
4.   Hexadecimal to Decimal 

Your choice?
5

Invalid choice. Please choose a number between 1 and 4.
1
23
Decimal to Binary (23) = 10111

हालाँकि, जब तक आप अपने प्रोग्राम में उस बिंदु पर पहुँचते हैं जहाँ आप एक वैध विकल्प दर्ज करते हैं, तो वह भाग जो "दशमलव संख्या दर्ज करें" जैसे संदेश को प्रिंट करता है, पहले ही बीत चुका है; यही कारण है कि आपको वह संदेश नहीं मिल रहा है।

0
Dawood ibn Kareem 4 नवम्बर 2017, 05:06