Java 使用switch语句运行方法时出现StackOverflower错误

Java 使用switch语句运行方法时出现StackOverflower错误,java,methods,switch-statement,stringbuilder,stack-overflow,Java,Methods,Switch Statement,Stringbuilder,Stack Overflow,所以对于学校来说,我的任务就是编写一个程序,将十进制转换成二进制,再转换成十六进制 因此,我遇到了一个问题,当我调用一个方法时,该方法使用4位二进制的para,并使用switch语句返回十六进制字符。它在第15行和第19行抛出堆栈溢出错误 package assignmentOne; public class QuestionSix { public static void main(String[] args) { new QuestionSix(); } public Ques

所以对于学校来说,我的任务就是编写一个程序,将十进制转换成二进制,再转换成十六进制

因此,我遇到了一个问题,当我调用一个方法时,该方法使用4位二进制的para,并使用switch语句返回十六进制字符。它在第15行和第19行抛出堆栈溢出错误

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;
}
}
我得到的错误是


谢谢

您的方法正在无限循环中运行,导致
堆栈溢出错误

我想

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

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

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

我想

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

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

您正在无条件地递归:

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

您正在无条件地递归:

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

当我键入答案时,突然“一个疯狂的Jon Skeet出现了”,你会喜欢它的。我放弃了:PI应该注意到,重命名为不同名称的方法现在很喜欢我在键入答案时突然“出现了一个wild Jon Skeet”。我放弃:PI应该注意到,将方法重命名为不同的名称now@AniketThakur:在哪里?我没有看到任何缺少的
break
语句。@AniketThakur:在哪里?我没有看到任何缺少的
break
语句。