Java 使用switch语句运行方法时出现StackOverflower错误
所以对于学校来说,我的任务就是编写一个程序,将十进制转换成二进制,再转换成十六进制 因此,我遇到了一个问题,当我调用一个方法时,该方法使用4位二进制的para,并使用switch语句返回十六进制字符。它在第15行和第19行抛出堆栈溢出错误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
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
语句。