繁体   English   中英

使用switch语句运行方法时出现StackOverflowError

[英]StackOverflowError when running a method with switch statement

因此,对于学校来说,我要做的任务是编写一个将十进制从二进制转换为十六进制的程序。

所以我遇到了一个问题,当我调用一个采用4位二进制数的参数并使用switch语句返回十六进制字符的方法时。 它在第15和19行引发StackOverflowError。

package assignmentOne;

public class QuestionSix {

public static void main(String[] args) {
    new QuestionSix();
}

public QuestionSix() {
    System.out.println(getHex("01001110"));
} 

public String getHex(String binary) {
    StringBuilder hexBuilder = new StringBuilder();
    int startIndex = 0;
    int endIndex = 4;
    while(true) {
        hexBuilder.append(getHex(binary.substring(startIndex, endIndex)));

        startIndex += 4;
        endIndex += 4;

        if(startIndex >= binary.length())
            break;
    }
    return hexBuilder.toString();
}

public String getHexValue(String binarySet) {
    switch(binarySet) {
        default: 
            break;
        case "0000":
            return "0";
        case "0001":
            return "1";
        case "0010":
            return "2";
        case "0011":
            return "3";
        case "0100":
            return "4";
        case "0101":
            return "5";
        case "0110":
            return "6";
        case "0111":
            return "7";
        case "1000":
            return "8";
        case "1001":
            return "9";
        case "1010":
            return "A";
        case "1011":
            return "B";
        case "1100":
            return "C";
        case "1101":
            return "D";
        case "1110":
            return "E";
        case "1111":
            return "F";
    }
    return null;
}
}

我得到的错误是在http://pastebin.com/fx3mCtif

谢谢

您无条件递归:

public String getHex(String binary) {
    StringBuilder hexBuilder = new StringBuilder();
    int startIndex = 0;
    int endIndex = 4;
    while(true) {
        hexBuilder.append(getHex(binary.substring(startIndex, endIndex)));
        // Irrelevant
    }
    // Irrelevant
}

基本上除了一些初始化外,您在方法中所做的第一件事就是再次调用它。 该调用将再次调用该方法...将再次调用该方法,依此类推。

我怀疑您要调用getHexValue ,而不是getHex ...使调用根本不递归。 当前,您根本不调用getHexValue

您的方法正在无限循环中运行,从而导致StackOverflowError

我认为

hexBuilder.append(getHex(binary.substring(startIndex, endIndex)));
                  ^^^^^^
            This recursion is causing infinite loop

应该

hexBuilder.append(getHexValue(binary.substring(startIndex, endIndex)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM