Java 为什么我的二进制2hex代码不能工作?

Java 为什么我的二进制2hex代码不能工作?,java,binary,hex,Java,Binary,Hex,我似乎无法在我的代码中找到问题。它以编译错误告终。它说方法Binary2Hex将无限递归。我问助教,他说我在输入字符串?我不明白 package binary2hex; public class Binary2Hex { public static String binary2Hex(String binary){ int pos = binary.length(); String hex = ""; while(pos>=0){ int posMinus

我似乎无法在我的代码中找到问题。它以编译错误告终。它说方法Binary2Hex将无限递归。我问助教,他说我在输入字符串?我不明白

package binary2hex;

public class Binary2Hex {
public static String binary2Hex(String binary){
int pos = binary.length();
    String hex = "";
    while(pos>=0){
        int posMinus4 = pos-4;
        if(posMinus4<0)
            posMinus4 = 0;
        String last4Bits = binary.substring(posMinus4, pos);
        while(last4Bits.length()<4)
            last4Bits = "0" + last4Bits;
        switch(last4Bits){
            case"0000": hex = "0" + hex; break;
            case"0001": hex = "1" + hex; break;
            case"0010": hex = "2" + hex; break;
            case"0011": hex = "3" + hex; break;
            case"0100": hex = "4" + hex; break; 
            case"0101": hex = "5" + hex; break;
            case"0110": hex = "6" + hex; break;
            case"0111": hex = "7" + hex; break;
            case"1000": hex = "8" + hex; break;
            case"1001": hex = "9" + hex; break;
            case"1010": hex = "A" + hex; break;
            case"1011": hex = "B" + hex; break;
            case"1100": hex = "C" + hex; break;
            case"1101": hex = "D" + hex; break;
            case"1110": hex = "E" + hex; break;
            case"1111": hex = "F" + hex; break;    
        }
        pos -= 4;
    }
    return binary2Hex("1010");
}
public static void main(String[] args) {
    System.out.println( binary2Hex("1010101010111010"));

}

}

是的,您不应该执行递归,因为您是在while循环中解决问题的。你应该马上回来。大部分情况下,你的代码都是正确的。另外,另一个提示是,如果字符串的长度为0,则不应处理该字符串。

请在问题中提供编译器错误。首先,这里有一些无限递归。这可能是您需要调查的内容。线程主java.lang.StackOverflower中的异常位于java.lang.String.substringString.java:1969位于binary2hex.binary2hex.binary2hex.binary2hex.java:11位于binary2hex.binary2hex.binary2hex.java:34Ah是的,我看到了无限递归。第34行的错误无限重复。我让它返回十六进制,但它仍然无限递归。我如何解决长度问题?它应该以:return hex;结束;。所以它没有办法重现。用whilepos>0而不是whilepos>=0很容易解决长度问题啊,我明白了,谢谢你,我的朋友!