为什么这个函数抱怨它应该返回char类型的结果?
public static char getUserResponseToGuess(int guess){
Scanner input = new Scanner(System.in);
char userResponse = 'x';
while((userResponse != 'h' && userResponse != 'l' && userResponse != 'c')){
System.out.print("Is it" + guess + "? (h/l/c)");
userResponse = input.next().charAt(0);
if (userResponse == 'h' || userResponse == 'l' || userResponse =='c'){
return userResponse;
}
else{
System.out.print("Is it" + guess + "? (h/l/c)");
}
}
}
答案 0 :(得分:2)
编译器完成的静态分析无法理解您使用的逻辑,因此根据其分析,所有可能的流程最终都不会返回值
当编译器分析代码时,如果代码中的if
条件不满足并且退出循环,则该方法将不返回值。
public static char getUserResponseToGuess(int guess){
Scanner input = new Scanner(System.in);
char userResponse = 'x';
while((userResponse != 'h' && userResponse != 'l' && userResponse != 'c')){
System.out.print("Is it" + guess + "? (h/l/c)");
userResponse = input.next().charAt(0);
if (userResponse == 'h' || userResponse == 'l' || userResponse =='c'){
return userResponse;
}
else{
System.out.print("Is it" + guess + "? (h/l/c)");
}
}
return userResponse;
}
答案 1 :(得分:1)
当userResponse
不是这三个字符中的一个时会发生什么?它将退出循环并返回什么?每条路径都必须返回char
答案 2 :(得分:0)
这应该有效。 Arun P Johny解决方案也有效。
public static char getUserResponseToGuess(int guess){
Scanner input = new Scanner(System.in);
char userResponse = 'x';
System.out.print("Is it " + guess + "? (h/l/c): ");
while((userResponse != 'h' && userResponse != 'l' && userResponse != 'c')){
userResponse = input.next().charAt(0);
if (userResponse == 'h' || userResponse == 'l' || userResponse =='c'){
break;
}
else{
System.out.print("Is it " + guess + "? (h/l/c): ");
}
}
return userResponse;
}