Если оператор в моем конструкторе не функционирует должным образомJAVA

Программисты JAVA общаются здесь
Anonymous
Если оператор в моем конструкторе не функционирует должным образом

Сообщение Anonymous »

В моей программе я должен поместить в свой класс десятичное целое число, бинарную строку или шестнадцатеричную строку. Затем он преобразует переменную в другие. и продолжай оттуда. Однако, основываясь на моей ошибке, программа не выясняет шестнадцатеричное число - это то, чем она есть. < /P>

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());
}
}
< /code>



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 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;
}
}
< /code>

Вот ошибка: < /p>


Исключение в потоке "Main" Java. lang.numberformatexception: для ввода
string: "x"
at
java.lang.numberformatexception.forinputString (numberFormateXception.java:65) < /p>

at java.lang.integer.parseint (Integer.java:580) < /p>

at java.lang.integer.parseint (integer.java:615) < /p>

at bdhnumber.convertbtod (bdhnumber.java:63) < /p>
< / Blockquote>

Ошибка находится в методе ConvertBtod, и, в частности, где она преобразует один бит двоичного номера на целое число. По какой -то причине мой код принимает шестнадцатеричный номер в качестве двоичного файла в конструкторе, вместо того, чтобы следить за операцией IF. Он не может преобразовать «X» в целое число, поэтому у него есть ошибка. Я просто не могу понять, почему. Любые дополнительные глаза были бы отличной помощью.

Подробнее здесь: https://stackoverflow.com/questions/531 ... g-properly

Вернуться в «JAVA»