该程序应该将二进制数转换为十进制数,并在输入具有非二进制数时抛出异常。这个程序将读取1,但是当我输入0时,它将抛出异常并告诉我它不是二进制文件。
测试程序:
//Prepare scanner from utility for input.
import java.util.Scanner;
public class Bin2Dec {
public static void main (String[] args){
//Convert the input string to their decimal equivalent.
//Open scanner for input.
Scanner input = new Scanner(System.in);
//Declare variable s.
String s;
//Prompt user to enter binary string of 0s and 1s.
System.out.print("Enter a binary string of 0s and 1s: ");
//Save input to s variable.
s = input.nextLine();
//With the input, use try-catch blocks.
//Print statement if input is valid with the conversion.
try {
System.out.println("The decimal value of the binary number "+ "'" + s + "'" +" is "+conversion(s));
//Catch the exception if input is invalid.
} catch (BinaryFormatException e) {
//If invalid, print the error message from BinaryFormatException.
System.out.println(e.getMessage());
}
}
//Declare exception.
public static int conversion(String parameter) throws BinaryFormatException {
int digit = 0;
for (int i = parameter.length(); i > 0; i--) {
char wrong_number = parameter.charAt(i - 1);
if (wrong_number == '1') digit += Math.pow(2, parameter.length() - i);
//Make an else statement and throw an exception.
else if (wrong_number == '0') digit += Math.pow(2, parameter.length() - i);
else
throw new BinaryFormatException("");
}
return digit;
}
}
答案 0 :(得分:1)
由于这些行,该程序仅接受'1'作为char:
if (wrong_number == '1') digit += Math.pow(2, parameter.length() - i);
//Make an else statement and throw an exception.
else
throw new BinaryFormatException("");
由于没有if(wrong_number == '0')
,该数字只接受1,并在遇到0时抛出异常。
除此之外:
如果可能的话,尽量避免使用Math.pow
。因为它是资源密集型的,在这种情况下完全没用。使用位移可以更容易地生成2 ^ x:
int pow_2_x = (1 << x);
最后:java已为此提供method:
int dec = Integer.parseInt(input_string , 2);
答案 1 :(得分:0)
问题在于你的逻辑。由于您正在处理二进制数字(&#39; 1&#39;和&#39; 0&#39;)但您只检查1,您应该检查&#39; 0&#39; 0&#39; 0并且只有在&#39; 0&#39;以外的情况下才会抛出异常。 ans&#39; 1&#39;
if (wrong_number == '1') digit += Math.pow(2, parameter.length() - i);
//Make an else statement and throw an exception.
else
throw new BinaryFormatException("");