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

  • 本文关键字:返回 Java if else 语句 java
  • 更新时间 :
  • 英文 :


我很难理解如何根据多种情况准确返回值。若我选择在If语句之外的readWeight()方法中使用return kg;,则错误告诉我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 ;
}

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

double kg = 0.0;

局部变量必须初始化,即使看起来至少有一个if语句将始终为true,并且kg将在相应的块中初始化,编译器可能不够聪明,无法实现这一点。

另一个可行的选择是用"else"替换上一个"else-if"。

您的代码基本上是

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 {

最新更新