我在我正在处理的函数中遇到运行时异常,但我无法弄清楚原因。该函数需要两个输入String []
和String
。确切的错误是:
运行时 例外:java.lang.NullPointerExceptionjava.lang.NullPointerException 在Tourney.winner(Tourney.java:14)参加Tourney.winner(Tourney.java:28) 在Tourney.winner(Tourney.java:28)在Tester $ 1.run(Tester.java:50)
我的代码
public class Tourney {
public int totalCount = 0;
public String winner(String[] bracket, String results) {
if (bracket.length==1){
return bracket[0];
}
else{
String [] teams = new String [bracket.length/2];
int count = 0;
for (int i = 0; i < bracket.length/2; i+=2){
if (bracket[i].equals("bye")){
teams[count]=bracket[i+1];
}
else if (bracket[i+1].equals("bye")){//runtime exception is here
teams[count]=bracket[i];
}
else{
if(results.charAt(totalCount)=='H'){
teams[count]=bracket[i];
}
else{
teams[count]=bracket[i+1];
}
}
count++;
totalCount++;
}
return (winner(teams,results));
}
}
}
示例输入和结果
bracket = {&#34; DUKE&#34;,&#34; UCLA&#34;,&#34; bye&#34;,&#34; MIT&#34;}
results =&#34; HL&#34;
返回:&#34;麻省理工学院&#34;
答案 0 :(得分:0)
无法保证:
else if (bracket[i+1].equals("bye"))
ith
+ 1
元素存在。你的函数最终将返回一个大小为1
的数组,因此当它尝试访问索引1(第二个元素)的元素时,它将抛出一个NPE。
答案 1 :(得分:0)
如果没有在调试器中单步执行它,我认为你的问题就在这一行:
for (int i = 0; i < bracket.length/2; i+=2)
你的winner()方法是递归调用的,所以如果你从一个带有4个元素的输入数组开始(bracket.length是4),那么winite方法将被递归调用,后面带有2个元素的输入数组从上面引用的for语句开始,遍历for循环。在第二次运行该方法时,以上面列出的for语句开头的循环将执行两次。在循环的第二次,我将是1,这一行:
else if (bracket[i+1].equals("bye")){//runtime exception
将尝试访问不存在的括号[2](递归调用中的bracket.length为2 - 因此只有括号[0]和方括号[1]有效)并且您将获得异常。