在if / else语句中为Java返回多个值

时间:2014-10-11 00:42:09

标签: java

我很难理解如何根据多种情况准确返回值。如果我选择使用return kg;方法中的readWeight(),在if语句之外,则会出现错误,告诉我kg可能尚未初始化。是不是在我的if语句中初始化了?有人能告诉我到底我做错了什么吗?我真的很想了解这一点。谢谢大家,我真的很感激。

public static void main(String[] args) {
    double kg = readWeight();
    System.out.println("Your dog weighs" + kg) ;
    System.out.println("Completed computing Kay9 Kibbles amount.") ;
}//end of main method

public static double convertLBtoKG(double lb) {
    final double KG_TO_LB_CONVERSION = 0.454 ;
    double kg = lb * KG_TO_LB_CONVERSION ;
    return kg ;
}//end of convertLBtoKG method

public static double readWeight(){
    Scanner keyboard = new Scanner(System.in) ;
    System.out.println("Would you like to enter your dog's weight " +
                       "in kilograms (kg) or pounds (lb)?\n" +
                       "Enter k (for kg) or p (for lb):") ;
    char weight = keyboard.nextLine().charAt(0) ; 
    double lb;
    double kg;

    if(weight == 'p' ){
        System.out.println("Enter your dog's weight in lb:") ;
        lb = keyboard.nextDouble() ;
        kg = convertLBtoKG(lb) ;
    }

    else if(weight == 'k'){
        System.out.println("Enter your dog's weight in kg:") ;
        kg = keyboard.nextDouble() ;
    }

    else if(weight != 'p' && weight != 'k'){
        System.out.println("I can't understand your choice; assuming kilograms.") ;
        System.out.println("Enter your dog's weight in kg:") ;
        kg = keyboard.nextDouble() ;
    }
    return kg ;
}

2 个答案:

答案 0 :(得分:2)

只需将其初始化为某个默认值:

double kg = 0.0;

必须初始化局部变量,即使看起来至少有一个if语句总是为真,并且kg将在相应的块中初始化,编译器可能不够智能意识到这一点。

可能有效的另一个选择是用“else”替换你的最后一个“else if”。

答案 1 :(得分:1)

您的代码基本上是

if (c1) {
    kg = ...
}
else if (c2) {
    kg = ...
}
else if (c3) {
    kg = ...
}
return kg;

因此,如果c1c2c3都不为真,则kg永远不会被初始化。您需要确保每个可能的路径确保初始化kg。你的第三个else if条款应该涵盖两个第一个条件未涵盖的案例。所以,写作

 else if(weight != 'p' && weight != 'k') {

是多余的,编译器不知道它涵盖了所有剩余的情况。知道它涵盖所有重复案件的唯一方法是使用

else {