2017-11-04 22 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 

然而,你的时间已经达到了你的程序,你输入一个有效的选择,即打印出消息,例如“输入十进制数”已经通过了部分点;这就是为什么你没有得到这个消息。