无法初始化 local/class 个变量

Trouble initializing local/class variables

public class ClassName {

   public static void main(String[] args) {
   //code: depending on user input runs Methodname1();
   }

      public static void MethodName1 {

        double kgs;
        double totalIn;

        //code: do/while try/catch etc.


        double ImpToMetBmi;
        double InchToMtrH;

        InchToMtrH = totalIn*2.54/100;

        ImpToMetBmi = (kgs/(InchToMtrH*InchToMtrH);

        System.out.printf("\nYour BMI is: %.3f\n" ,ImpToMetBmi);
      }
}

对于又长又糟糕的代码,真的很抱歉。我觉得必须全部code/layout都看过才能搞清楚问题

我遇到的错误: 异常...无法编译的源代码 - 变量 totalIn 可能尚未初始化 异常...无法编译的源代码 - 变量 kgs 可能尚未初始化

这个公式在我插入 do/while try/catch 异常处理语句之前有效。 我花了几个小时阅读有关声明和初始化变量、局部变量和 class 变量的内容。我尝试了几种不同的方法,但没有尝试解决问题。 我对造成这种情况的原因以及如何解决它感到困惑。我想弄清楚这一点并了解解决方案。 我在哪里初始化 'totalIn' 和 'kgs'?我将它们初始化为什么? 如果有任何不同,这些变量将由用户通过扫描仪输入的值填充。 请帮忙!

public class ClassName {

   public static void main(String[] args) {
   //code: depending on user input runs Methodname1();
   }

      public static void MethodName1(double KGS, double TOTAL) {

        double kgs = KGS;
        double totalIn = TOTAL;

        //code: do/while try/catch etc.


        double ImperialToMetricBmi;
        double InchesToMtrHeight;

        InchesToMtrHeight = totalIn*2.54/100;

        ImperialToMetricBmi = (kgs/(InchesToMtrHeight*InchesToMtrHeight));

        System.out.printf("\nYour BMI is: %.3f\n" ,ImperialToMetricBmi);
      }
}
您基本上可以在声明它们的地方同时初始化 kgs 和 totalIn,但如果该方法将这些值作为参数会更好(截至此时,这两个值都不会被初始化)。此外,您还需要使用这两个参数调用静态方法,例如

double value1 = 123.1;
double value2 =  24
MethodName1(value1, value2)

进一步阅读问题后,我意识到您可能试图在条件语句或循环中初始化值。 简单理解当条件对 运行 语句不满足时会发生什么? 答案是该值永远不会被初始化,这里就是这种情况。

MethodName1 方法声明错误。你错过了争论部分。将其更改为 public static void MethodName1().

这是一个示例,它解释了您得到的原因以及为什么得到那个 -

double test;
if( isTrue){
    test = 2.0d;`enter code here`
} 
// This will give you a error stating that test might have not initialized
double calculate = test * 5.0;

原因很明确,如果 if 块中的条件为真,则测试值将初始化为 2.0,否则它将未初始化。

对此的快速修复可能是将 test 初始化为某个值(可能为 0)。

来找你,要初始化这些变量,你可以执行以下操作 -

static double kgs;
static double totalIn;
public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  kgs= sc.nextDouble;
  totalIn = sc.nextDouble();
}


或者将它们作为方法参数传递,如下所示 -

public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  double kgs = sc.nextDouble;
  double totalIn = sc.nextDouble();
}

public void yourMethod(double kgs, double totalIn){
  // do whatever you want with above passed variables

}