如何使此代码不显示负值?

问题描述 投票:0回答:2

编写该代码是为了将十六进制值转换为十进制,但是当我输入无效的数字(例如“ 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);

java hex
2个回答
0
投票

您有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");
    }  
}      

0
投票

如果您输入的不是十六进制数字,则可能会引发错误:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.