2017-11-04 48 views
0
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 = "ABCDEF"; 
      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 = "ABCDEF"; 
     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之間的數字」,當我輸入一個有效的後,程序就停止運行。在Java中

例如,如果我選擇'1',它並不要求我輸入小數。我錯過了什麼?

回答

0

您沒有循環,您可以一次又一次地嘗試,直到輸入一個數字。

試試這個:

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; 

      } 
     } 

但請記住,沒有從enterin正確的號碼旁邊的循環逃逸。

0

您正在等待交換機默認的新條目。所以,直到你把一個在它只是坐在那裏

您可以在切換之前做的那部分更容易:

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

您的程序不會停止。在輸入有效的號碼後,它實際上正在等待輸入。如果您不相信我,請在輸入後輸入另一個號碼,然後輸入有效的選項。對我來說,它是這樣的。

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 

然而,你的時間已經達到了你的程序,你輸入一個有效的選擇,即打印出消息,例如「輸入十進制數」已經通過了部分點;這就是爲什麼你沒有得到這個消息。