编写该代码是为了将十六进制值转换为十进制,但是当我输入无效的数字(例如“ S”时,它将打印出负值。
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "a1";
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;
}
System.out.println(“等效十进制数为” + val);
您有2个选择,添加条件
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
int d = digits.indexOf(c);
if (d == -1) {
val = -1;
break;
}
val = 16*val + d;
}
if (val == -1) {
System.out.println("Invalid number");
} else {
System.out.println(val);
}
或使用像这样的内置Java转换器
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "a1";
try {
int val = Integer.parseInt(s, 16);
System.out.println(val);
} catch(NumberFormatException ex) {
System.out.println("Invalid number");
}
}
如果您输入的不是十六进制数字,则可能会引发错误:
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
if (d == -1) {
throw new NumberFormatException("Your input is not an hexadecimal number");
}
val = 16 * val + d;
}