猿问

初始化局部/类变量时出现问题

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);

      }

}

对于又长又糟糕的代码感到非常抱歉。我认为必须查看所有代码/布局才能找出问题。


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


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


尚方宝剑之说
浏览 124回答 3
3回答

白衣染霜花

这是一个示例,解释了您遇到的原因以及为什么您会遇到这种情况 -double test;if( isTrue){    test = 2.0d;`enter code here`} // This will give you a error stating that test might have not initializeddouble calculate = test * 5.0;原因很清楚,如果 if 块中的条件为 true,则测试值将使用 2.0 进行初始化,否则它将未初始化。对此的快速修复可能是将测试初始化为某个值(可能是 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}

Helenr

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 =  24MethodName1(value1, value2)进一步阅读这个问题,我意识到您可能正在尝试初始化条件语句或循环内的值。简单地理解当运行语句的条件不满足时会发生什么?答案是该值永远不会被初始化,这就是这里发生的情况。

慕田峪4524236

方法声明MethodName1错误。你错过了论证部分。将其更改为public static void MethodName1().
随时随地看视频慕课网APP

相关分类

Java
我要回答