返回char的Java方法抱怨不返回char。

时间:2015-02-05 04:10:24

标签: java methods char

为什么这个函数抱怨它应该返回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)");
        }
    }
}

3 个答案:

答案 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;    
}