我有将十六进制值转换为十进制和二进制的代码。我正在尝试为每次转换创建两个不同的用户定义方法。另外,main方法应该在不同的类中。
public static int hex2decimal(String s)
{
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
int d = digits.indexOf(c);
val = 16 * val + d;
}
return val;
}
public static void main(String args[]) {
String hexdecnum;
int decnum, i = 1, j;
int binnum[] = new int[100];
Scanner scan = new Scanner(System.in);
boolean valid;
do {
valid = true;
System.out.print("Enter Hexadecimal number in the range of 90 to FF: ");
hexdecnum = scan.nextLine();
final int MAX_LENGTH = 2;
if (hexdecnum.matches("[A-Fa-f0-9]{2}") && hex2decimal(hexdecnum) >= 144) {
/* first convert the hexadecimal to decimal */
decnum = hex2decimal(hexdecnum);
System.out.print("Equivalent Dec Number is : " + decnum);
System.out.println();
/* now convert the decimal to binary */
while (decnum != 0) {
binnum[i++] = decnum % 2;
decnum = decnum / 2;
}
System.out.print("Equivalent Binary Number is : ");
for (j = i - 1; j > 0; j--) {
System.out.print(binnum[j]);
}
} else {
System.out.println("ERROR: Invalid Input");
valid = false;
}
} while (!valid);
}
}
执行以下操作:
import java.util.Scanner;
class Conversion {
public static int hex2decimal(String s) {
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
val = 16 * val + d;
}
return val;
}
public static int[] dec2binary(int decnum) {
int binnum[] = new int[8];
int i = 0;
while (decnum != 0) {
binnum[i++] = decnum % 2;
decnum = decnum / 2;
}
return binnum;
}
void showConversion(Scanner scan) {
String hexdecnum;
int decnum, j;
boolean valid;
do {
valid = true;
System.out.print("Enter Hexadecimal number in the range of 90 to FF: ");
hexdecnum = scan.nextLine();
if (hexdecnum.matches("[A-Fa-f0-9]{2}") && hex2decimal(hexdecnum) >= 144) {
/* first convert the hexadecimal to decimal */
decnum = hex2decimal(hexdecnum);
System.out.println("Equivalent Dec Number is : " + decnum);
/* now convert the decimal to binary */
int binnum[] = dec2binary(decnum);
System.out.print("Equivalent Binary Number is : ");
for (j = binnum.length - 1; j > 0; j--) {
System.out.print(binnum[j]);
}
System.out.println();
} else {
System.out.println("ERROR: Invalid Input");
valid = false;
}
} while (!valid);
}
}
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
Conversion c = new Conversion();
c.showConversion(scan);
}
}
示例运行:
Enter Hexadecimal number in the range of 90 to FF: FF
Equivalent Dec Number is : 255
Equivalent Binary Number is : 1111111
另一个示例运行:
Enter Hexadecimal number in the range of 90 to FF: 90
Equivalent Dec Number is : 144
Equivalent Binary Number is : 1001000
如有任何疑问/问题,请随时发表评论。
[更新]
根据OP的评论发布在dec2binary
的另一个版本下面:
import java.util.Scanner;
class Conversion {
public static int hex2decimal(String s) {
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
val = 16 * val + d;
}
return val;
}
public static String dec2binary(int decnum) {
StringBuilder binary = new StringBuilder();
while (decnum != 0) {
binary.append(decnum % 2);
decnum = decnum / 2;
}
return binary.toString();
}
void showConversion(Scanner scan) {
String hexdecnum;
int decnum, j;
boolean valid;
do {
valid = true;
System.out.print("Enter Hexadecimal number in the range of 90 to FF: ");
hexdecnum = scan.nextLine();
if (hexdecnum.matches("[A-Fa-f0-9]{2}") && hex2decimal(hexdecnum) >= 144) {
/* first convert the hexadecimal to decimal */
decnum = hex2decimal(hexdecnum);
System.out.println("Equivalent Dec Number is : " + decnum);
/* now convert the decimal to binary */
String binary = dec2binary(decnum);
System.out.print("Equivalent Binary Number is : " + binary);
} else {
System.out.println("ERROR: Invalid Input");
valid = false;
}
} while (!valid);
}
}
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
Conversion c = new Conversion();
c.showConversion(scan);
}
}
注意:如果要使用String
而不是StringBuilder
,则可以使用。但是,我建议您通过StringBuilder vs String concatenation in toString() in Java正确理解它。