十六进制转二进制和十进制转换器
Hexadecimal to binary and decimal converter
各位。这里我有一个六进制到二进制和十进制转换器。问题是当我输入无效输入(例如字母 G 或 X)时,它会给我一个负输出。我怎样才能阻止它这样做,而是打印出它是一个无效数字
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);
System.out.print("Enter Hexadecimal Number : ");
hexdecnum = scan.nextLine();
final int MAX_LENGTH = 2;
if(String.valueOf(hexdecnum).length() <= MAX_LENGTH) {
/* 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");
System.out.print("Enter a number: ");
}
}
试试这个代码。您只需要检查 charAt returns 是否为正值,如果它 returns -1 表示您要查找的字符不在该字符串中。
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);
if (d!=-1)
val = 16*val + d;
else
return 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);
System.out.print("Enter Hexadecimal Number : ");
hexdecnum = scan.nextLine();
final int MAX_LENGTH = 2;
if(String.valueOf(hexdecnum).length() <= MAX_LENGTH) {
/* first convert the hexadecimal to decimal */
decnum = hex2decimal(hexdecnum);
if (decnum==-1)
System.out.println("Incorrect Hex Value");
else {
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");
System.out.print("Enter a number: ");
}
}
根据您的评论,我更新了程序以允许仅接受 90 到 FF 的十六进制范围内的数字。
按如下操作:
import java.util.Scanner;
public class 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);
}
}
样本运行:
Enter Hexadecimal number in the range of 90 to FF: abc
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: ab
Equivalent Dec Number is : 171
Equivalent Binary Number is : 10101011
另一个样本运行:
Enter Hexadecimal number in the range of 90 to FF: AG
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: AB
Equivalent Dec Number is : 171
Equivalent Binary Number is : 10101011
另一个样本运行:
Enter Hexadecimal number in the range of 90 to FF: 21
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: 90
Equivalent Dec Number is : 144
Equivalent Binary Number is : 10010000
另一个样本运行:
Enter Hexadecimal number in the range of 90 to FF: 40
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: FF
Equivalent Dec Number is : 255
Equivalent Binary Number is : 11111111
如有任何问题,请随时发表评论 doubt/issue。
各位。这里我有一个六进制到二进制和十进制转换器。问题是当我输入无效输入(例如字母 G 或 X)时,它会给我一个负输出。我怎样才能阻止它这样做,而是打印出它是一个无效数字
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);
System.out.print("Enter Hexadecimal Number : ");
hexdecnum = scan.nextLine();
final int MAX_LENGTH = 2;
if(String.valueOf(hexdecnum).length() <= MAX_LENGTH) {
/* 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");
System.out.print("Enter a number: ");
}
}
试试这个代码。您只需要检查 charAt returns 是否为正值,如果它 returns -1 表示您要查找的字符不在该字符串中。
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);
if (d!=-1)
val = 16*val + d;
else
return 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);
System.out.print("Enter Hexadecimal Number : ");
hexdecnum = scan.nextLine();
final int MAX_LENGTH = 2;
if(String.valueOf(hexdecnum).length() <= MAX_LENGTH) {
/* first convert the hexadecimal to decimal */
decnum = hex2decimal(hexdecnum);
if (decnum==-1)
System.out.println("Incorrect Hex Value");
else {
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");
System.out.print("Enter a number: ");
}
}
根据您的评论,我更新了程序以允许仅接受 90 到 FF 的十六进制范围内的数字。
按如下操作:
import java.util.Scanner;
public class 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);
}
}
样本运行:
Enter Hexadecimal number in the range of 90 to FF: abc
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: ab
Equivalent Dec Number is : 171
Equivalent Binary Number is : 10101011
另一个样本运行:
Enter Hexadecimal number in the range of 90 to FF: AG
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: AB
Equivalent Dec Number is : 171
Equivalent Binary Number is : 10101011
另一个样本运行:
Enter Hexadecimal number in the range of 90 to FF: 21
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: 90
Equivalent Dec Number is : 144
Equivalent Binary Number is : 10010000
另一个样本运行:
Enter Hexadecimal number in the range of 90 to FF: 40
ERROR: Invalid Input
Enter Hexadecimal number in the range of 90 to FF: FF
Equivalent Dec Number is : 255
Equivalent Binary Number is : 11111111
如有任何问题,请随时发表评论 doubt/issue。