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