为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尚方宝剑之说 2023-12-13 16:48:53
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 输入的值填充。请帮忙!
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这是一个示例,解释了您遇到的原因以及为什么您会遇到这种情况 -


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 块中的条件为 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


}


查看完整回答
反对 回复 2023-12-13
?
Helenr

TA贡献1780条经验 获得超3个赞

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)

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



查看完整回答
反对 回复 2023-12-13
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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



查看完整回答
反对 回复 2023-12-13
  • 3 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信