В моей программе я должен поместить десятичное целое число, двоичную строку или шестнадцатеричную строку в мой класс. Затем он преобразует переменную в другие.
Моя проблема заключается в том, что, поскольку двоичные и шестнадцатеричные значения являются строками, у меня есть конструктор, чтобы определить, является ли аргумент двоичным или шестнадцатеричным, и перейти оттуда. Однако, исходя из моей ошибки, программа не выяснила, что это за шестнадцатеричное число.
import java.util.*;
class Tester{
public static void main(String[] args){
String hex1 = "0x34";
BDHNumber test = new BDHNumber(hex1);
System.out.println(test.getDec());
System.out.println(test.getBin());
System.out.println(test.getHex());
}
}
import java.util.*;
import java.lang.*;
public class BDHNumber{
private int theNumberAsDecimal;
private String theNumberAsBinary;
private String theNumberAsHexadecimal;
private static String[] hexadecimalArray = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "A", "B",
"C", "D", "E", "F"};
private static String[] binaryArray = {"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"};
//Default empty constructor.
public BDHNumber(){
}
//Decimal constructor.
public BDHNumber(int decimal){
theNumberAsDecimal = decimal;
theNumberAsBinary = convertDToB(decimal);
theNumberAsHexadecimal = convertBToH(theNumberAsBinary);
}
//Constructs binary or hexadecimal.
public BDHNumber(String stringNumber){
if (stringNumber.startsWith("0x")){
theNumberAsHexadecimal = stringNumber;
theNumberAsBinary = convertHToB(theNumberAsHexadecimal);
theNumberAsDecimal = convertBToD(theNumberAsBinary);
}
else{
theNumberAsBinary = stringNumber;
//Pads the binary to be multiples of 4
while(theNumberAsBinary.length()%4 != 0){
theNumberAsBinary = "0" + theNumberAsBinary;
}
theNumberAsDecimal = convertBToD(theNumberAsBinary);
theNumberAsHexadecimal = convertBToH(theNumberAsBinary);
}
}
//Converts Binary to Decimal.
private static int convertBToD(String binary){
String binary1 = binary;
int decimal = 0;
int index = 0;
//Pads the binary to be multiples of 4
while(binary1.length()%4 != 0){
binary1 = "0" + binary1;
}
int length = binary1.length();
for(int i = length; i > 0; i--){
decimal = decimal + (int)(Integer.parseInt(binary1.substring(index,
index+1)) * Math.pow(2, (i-1)));
index++;
}
return decimal;
}
//Converts Binary to Hexadecimal.
private static String convertBToH(String binary){
String binary1 = binary;
String hex = "";
int index = 0;
int binaryAsDecimal = 0;
//Pads the binary to be multiples of 4
while(binary1.length()%4 != 0){
binary1 = "0" + binary1;
}
int length = binary1.length();
while(length != 0){
binaryAsDecimal = convertBToD(binary1.substring(length-4, length));
for(int i = 0; i<hexadecimalArray.length; i++){
if(i == binaryAsDecimal){
hex = hexadecimalArray[i] + hex;
}
}
length = length - 4;
}
return hex;
}
//Converts Decimal to Binary
private static String convertDToB(int decimal){
int decimal1 = decimal;
int remainder;
String binary = "";
while (decimal != 0){
remainder = decimal % 2;
if (remainder == 1){
binary = "1" + binary;
}
else if (remainder == 0){
binary = "0" + binary;
}
decimal = decimal / 2;
}
return binary;
}
//Converts Hexadecimal to Binary.
private static String convertHToB(String hexadecimal){
String hex = hexadecimal;
String binary = "";
int index = 0;
int length = hex.length();
for(int i = hex.length(); i > 0; i--){
if(hexadecimalArray[index] == hex.substring(length-1, length)){
binary = convertDToB(index) + binary;
}
index++;
length--;
}
return hex;
}
//Getters.
public String getBin(){
return theNumberAsBinary;
}
public String getHex(){
return theNumberAsHexadecimal;
}
public int getDec(){
return theNumberAsDecimal;
}
}
Вот ошибка:
Исключение в потоке "main" java.lang.NumberFormatException: для ввода
строка: «х»
в
java.lang.NumberFormatException.forInputString (NumberFormatException.java:65)
at java.lang.Integer.parseInt (Integer.java:580)
at java.lang.Integer.parseInt (Integer.java:615)
в BDHNumber.convertBToD (BDHNumber.java:63)
Ошибка в методе convertBToD, в частности, где он преобразует один бит двоичного числа в целое число. По какой-то причине мой код принимает шестнадцатеричное число в качестве двоичного в конструкторе, а не после оператора if. Он не может преобразовать «х» в целое число, поэтому он имеет ошибку. Я просто не могу понять, почему. Любые лишние глаза очень помогли бы.