Java-输出错误

时间:2018-02-26 06:45:18

标签: java

这是我编写的代码:

public String binary(String s)
{
    String[] a = {
      "0000","0001","0010","0011","0100","0101","0110","0111",
      "1000","1001","1010","1011","1100","1101","1110","1111"
    };

    String k = "";
    for(int i = 0; i <= s.length() - 1; i++)
    {
        if      (s.charAt(i) == 'a') { k += a[10]; }
        else if (s.charAt(i) == 'b') { k += a[11]; }
        else if (s.charAt(i) == 'c') { k += a[12]; }
        else if (s.charAt(i) == 'd') { k += a[13]; }
        else if (s.charAt(i) == 'e') { k += a[14]; }
        else if (s.charAt(i) == 'f') { k += a[15]; }
        else { k += a[i]; }
    }
    return k;
}

我输出为[0-9] = 0000.我该如何解决这个问题?我做错了什么?

4 个答案:

答案 0 :(得分:1)

问题在于使用a[i]。这是逻辑错误因为 i是循环变量,表示s String中的当前索引。但是您正在使用它在变量a中对其进行索引。因此,i变量在这里使用不正确。

以下内容经过更正(并经过优化)代码。看到它正常工作here

public class HexaDecimal 
{
    public String binary(String s)
    {
        String[] a= {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
        String k="";
        for(int i=0;i<s.length();i++)
        {
            char ch = Character.toUpperCase(s.charAt(i));
            if(ch>='A' && ch <= 'F') k+= a[ch - 'A' + 10];
            else k+= a[ch - '0'];
        }
        return k;
    }
}

答案 1 :(得分:0)

k+=a[i];替换为k+=a[s.charAt(i) - '0'];

您正在使用字符串索引循环变量作为a的索引,而不是字符串中该位置的字符。

你需要做- '0'从unicode代码点转换为它代表的ASCII数字值(我假设你想在这里使用)

答案 2 :(得分:0)

你的最后一个做错了计算。它没有考虑输入什么,只考虑位置。你希望它是

else { 
    k += a[s.charAt(i) - '0'];
}

有更简单的方法来获取十六进制的二进制表示,并且您可能还想检查输入中它不包含除0-9或a-f以外的任何内容。

答案 3 :(得分:0)

您可以将for循环更改为:

for(int i=0; i < s.length(); i++)
{
    char c = s.charAt(i);
    if (c >= '0' && c <= '9') k += a[c - '0'];
    else if (c >= 'a' && c <= 'f') k += a[c - 'a' + 10];
    else if (c >= 'A' && c <= 'F') k += a[c - 'A' + 10];
    else throw new InvalidArgumentException(s);
}

至少在我看来,这是更简单和不言自明的。处理数字,大写和小写字母,并在输入错误时以预期的方式失败。