从一个基地转换到另一个基地

时间:2013-06-11 18:06:13

标签: java

我已经尝试制作一个可行的程序,但问题是,这与我想要的输出不一样。

注意**

这就是我想要的......

输入起始基数:它应该是二进制或八进制或六进制

输入结束基数:它应为十进制

输入数字:如果输入2作为起始基数,则只能输入1和0。如果输入16作为起始基数0-9并且可以使用A-F。

和我做的:(

Scanner scanner = new Scanner(System.in);
System.out.println("Enter a starting base: ");
String binaryNumber = scanner.nextLine();
System.out.println("Enter a end base: ");
String octalNumber = scanner.nextLine();
System.out.println("Enter a number: ");
String decimalNumber = scanner.nextLine();
int myInt = Integer.parseInt(binaryNumber, 2);
int myInt2 = Integer.parseInt(octalNumber, 8);
int x = myInt;
System.out.println(
     binaryNumber + " in Binary, is "
   + Integer.toString(myInt, 8) + " in Octal" + " and "
   + Integer.toString(x, 10)  +" in decimal");

1 个答案:

答案 0 :(得分:1)

这是你需要做的。弄清楚代码并理解。您有Scanner#nextInt()方法来读取整数。您不必使用nextLine()方法。更重要的是,Scanner#nextInt(int radix)接受指定基数形式的输入。如果您不在该表单中输入输入,则会引发异常。您可以捕获该异常以向用户显示错误消息。

您的目标startBaseendBase以及用于binaryNumber的变量不匹配。请命名您的变量,以表达它们的目的。

在此处查看代码的修改版本:

    import java.util.*;
    public class Tester{
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a starting base: ");
        int startBase = scanner.nextInt();
        System.out.println("Enter a end base: ");
        int endBase = scanner.nextInt();
        int number=0;
       try{
          System.out.println("Enter a number: ");
          number= scanner.nextInt(startBase);
          System.out.println("Entered number:"+number+"(base"+startBase+")");
          System.out.println("Converted number:"+Integer.toString(number,endBase)+"(enbase"+endBase+")");

       }catch(InputMismatchException e){
              System.out.println("Invalid input for the given radix");
              e.printStackTrace();   //you can comment it if you don't need this.
       } 
      }
  }