我很难理解如何根据多种情况准确返回值。若我选择在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;
因此,如果c1
、c2
和c3
都不为真,则kg
永远不会被初始化。您需要确保每个可能的路径都确保kg
被初始化。您的第三个else if
条款应该涵盖第一个条件中未涵盖的情况。所以,写
else if(weight != 'p' && weight != 'k') {
是多余的,编译器不知道它涵盖了所有剩余的情况。让它知道它涵盖了所有重制案例的唯一方法是使用
else {