[英]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.