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

标签 java methods switch-statement stringbuilder stack-overflow

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

所以我遇到了一个问题,当我调用一个方法,该方法采用 4 位二进制的 para 并使用 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

关于java - 使用 switch 语句运行方法时出现 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451636/

相关文章:

java - java中向数组添加变量元素

android - 如何重用 ListView 的方法?

Java - 为什么 Eclipse 告诉我我的方法必须返回类型 int?

javascript - 选择 1 后无法切换到下一个案例

arrays - 字符串数组函数错误,无法正确打印顺序

java - 是否可以将项目导出为 jar 文件并将此 jar 导入其他项目以使用项目?

java - Clojure - java 互操作 - 如何传递 float 组>

java - 调用方法时有关参数的错误

php - 我应该在 switch 语句中使用 continue 吗?

java - Gerrit 删除需要验证 +1(已验证)