所以坚持尝试找出这一点。感谢您的帮助!
这是我的指导原则:创建两个Java类以将八进制转换为十进制。提示用户输入一个八进制数字。您应该在测试器类中实现一个名为convertToDec的方法,如果该数字不是八进制的,则该方法将抛出自定义异常OctalNumberException(例如,包含的数字不是0到7)。 main方法应捕获异常,向用户显示一条消息并继续其正常执行。如果八进制数有效,则该方法应返回等效的十进制数。程序将继续提示用户输入其他数字,直到输入0(零)为止。附带样品运行。
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 ");
}
}
答案 0 :(得分:1)
在当前代码中,当您键入6 3 5和2时,它将作为参数'oct'中的十进制数字6352传递到convertToDecimal()。
您执行的下一条语句(部分)说“如果oct> 7抛出异常”。 6352确实大于7,所以引发了异常。
测试整数是否在0到7之间是没有意义的。
您应该测试的“不超过7”是变量“ temp”中的孤立数字。