因此,对于学校来说,我的任务是编写一个将十进制转换为二进制再转换为十六进制的程序。
所以我遇到了一个问题,当我调用一个方法,该方法采用 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/