八进制到十进制使用异常的帮助

时间:2019-02-23 17:54:04

标签: java

所以坚持尝试找出这一点。感谢您的帮助!

这是我的指导原则:创建两个Java类以将八进制转换为十进制。提示用户输入一个八进制数字。您应该在测试器类中实现一个名为convertToDec的方法,如果该数字不是八进制的,则该方法将抛出自定义异常OctalNumberException(例如,包含的数字不是0到7)。 main方法应捕获异常,向用户显示一条消息并继续其正常执行。如果八进制数有效,则该方法应返回等效的十进制数。程序将继续提示用户输入其他数字,直到输入0(零)为止。附带样品运行。 sample

import java.util.Scanner;

public class Oct2DecTesterBHarris {


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int oct=1;


            try {
                System.out.print("Enter octal number: ");
                convertToDecimal(input.nextInt());
            }

            catch(OctalNumberException ex) {
                System.out.println("not an Octal");
            } 
        }
//convertToDec, which throws a custom exception OctalNumberException if the number is not octal

    public static int convertToDecimal(int oct)
        throws OctalNumberException {
    int decimal = 0; 
    int num = 0;
    if ( (oct < 0 || oct > 7))
        throw new OctalNumberException("Exception. Number is not octal ");

    else {  
        while(true){ 
            if(oct == 0) {
                break;
            }
            else{ 
                int temp = oct % 10; 
                decimal += temp * Math.pow(8, num); 
                oct = oct / 10; 
                num++;
            }
        } 
        return decimal;  
        }   
        }
    }



}



public class OctalNumberException extends Exception {


     public  OctalNumberException() {
         super("Exception. Number is not octal ");
          }
}

1 个答案:

答案 0 :(得分:1)

在当前代码中,当您键入6 3 5和2时,它将作为参数'oct'中的十进制数字6352传递到convertToDecimal()。

您执行的下一条语句(部分)说“如果oct> 7抛出异常”。 6352确实大于7,所以引发了异常。

测试整数是否在0到7之间是没有意义的。

您应该测试的“不超过7”是变量“ temp”中的孤立数字。