我正在尝试创建一个java程序,该程序将计算机中RAM位置的十六进制可能错误转换为十六进制。然后从十六进制切换到二进制,从二进制切换到十进制,以查找RAM损坏的位置。这是我到目前为止的代码:
public class Practice {
private static String result;
private static int j;
public static void hexToBinary() throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));
result = "";
String binVal; // the binary value of the Hex
while (infile.hasNextLine()) {
String line = infile.nextLine();
Scanner input = new Scanner(line);
String hex = input.next();
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
switch (hexChar) {
case ('0'):
binVal = "0000";
break;
case ('1'):
binVal = "0001";
break;
case ('2'):
binVal = "0010";
break;
case ('3'):
binVal = "0011";
break;
case ('4'):
binVal = "0100";
break;
case ('5'):
binVal = "0101";
break;
case ('6'):
binVal = "0110";
break;
case ('7'):
binVal = "0111";
break;
case ('8'):
binVal = "1000";
break;
case ('9'):
binVal = "1001";
break;
case ('A'):
binVal = "1010";
break;
case ('B'):
binVal = "1011";
break;
case ('C'):
binVal = "1100";
break;
case ('D'):
binVal = "1101";
break;
case ('E'):
binVal = "1110";
break;
case ('F'):
binVal = "1111";
break;
default:
binVal = "invalid input";
break;
}
result += binVal;
}
System.out.println("Binary of " + hex + ":" + result);
}
}
public static void binaryToDecimal() {
double j=0;
for(int i=0;i<result.length();i++)
{
if(result.charAt(i)== '1')
{
j= j + Math.pow(2, result.length()-1-i);
}
}
System.out.println("Decimal value: " + j);
}
public static void main(String arg[]) throws IOException {
hexToBinary();
binaryToDecimal();
}
}
十六进制到二进制很好。十进制部分只显示一个数字(它不是正确的值)。不确定要使用什么循环或如何运行二进制到十进制部分。提前感谢您的任何建议!txt文件有以下值:
ABCDEFABC
1A00D0000
7A0EDF301
3CDAEFFAD
好的,我不清楚你的问题。你只得到一个数字的原因是你从main
调用hexToBines
,用这个方法循环遍历整个文件,然后返回main
。之后,你调用binaryToDecimal
它打印出结果
的值,这是它从hexToBines
获得的最后一个值。
你需要做的是从文件中读取一个值,将其转换为二进制,然后转换为十进制,然后继续下一个值。一种方法是这样做的:
更改您的方法以返回值并获取参数。hexToBines
应该是-
public static String hexToBinary(String hex) throws IOException {
String result = "";
String binVal; // the binary value of the Hex
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
switch (hexChar) {
case ('0'):
binVal = "0000";
break;
case ('1'):
binVal = "0001";
break;
case ('2'):
binVal = "0010";
break;
case ('3'):
binVal = "0011";
break;
case ('4'):
binVal = "0100";
break;
case ('5'):
binVal = "0101";
break;
case ('6'):
binVal = "0110";
break;
case ('7'):
binVal = "0111";
break;
case ('8'):
binVal = "1000";
break;
case ('9'):
binVal = "1001";
break;
case ('A'):
binVal = "1010";
break;
case ('B'):
binVal = "1011";
break;
case ('C'):
binVal = "1100";
break;
case ('D'):
binVal = "1101";
break;
case ('E'):
binVal = "1110";
break;
case ('F'):
binVal = "1111";
break;
default:
binVal = "invalid input";
break;
}
result += binVal;
}
return result;
}
binaryToDecimal
应该是-
public static Double binaryToDecimal(String result) {
double j=0;
for(int i=0;i<result.length();i++)
{
if(result.charAt(i)== '1')
{
j= j + Math.pow(2, result.length()-1-i);
}
}
return j;
}
main
将读取文件,将值传递给两个方法并打印结果:
public static void main(String args[]) throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));
String result;
Double decimal;
while (infile.hasNextLine()) {
String line = infile.nextLine();
Scanner input = new Scanner(line);
String hex = input.next();
result = hexToBinary(hex);
System.out.println("Binary of " + hex + ":" + result);
decimal = binaryToDecimal(result);
System.out.println("Decimal value: " + decimal);
}
输出是
ABCDEFABC的二进制:101010111100110111101111101010111100十进制值:4.6118402748E10 1A00D0000的二进制:000110100000000011010000000000000000十进制值:6.980173824E9 7A0EDF301的二进制:011110100000111011011111001100000001十进制值:3.2764719873E10 3CDAEFFAD的二进制:001111001101101011101111111110101101十进制值:1.6335699885E10
希望这对你有帮助。