【问题标题】:Trouble initializing local/class variables初始化本地/类变量时遇到问题
【发布时间】:2020-02-20 02:20:45
【问题描述】:
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”?以及我将它们初始化为什么? 这些变量由用户通过扫描仪输入的值填充,如果这有什么不同的话。 请帮忙!

【问题讨论】:

  • 您能否分享更多关于您如何初始化代码中的变量的详细信息。据我所见,使用 in 时您的变量可能尚未初始化。
  • 我只声明了变量和公式,直到我插入 do/while 和 try/catch 代码。然后我得到了初始化错误。我不知道在哪里或将它们初始化为什么。无论我尝试什么,都会遇到更多错误。我希望这是有道理的。我是 Java 新手,很困惑 - 显然 :)
  • 抱歉,这是一个复制和粘贴错误。我在 Netbeans 中的代码是 'public static void MethodName1() {'

标签: java variables initialization local-variables class-variables


【解决方案1】:

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)

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

【讨论】:

  • 为什么要把传入的参数放到局部变量中?你可以直接使用它们吧!
  • 我尝试了您的一些建议。我现在处于程序甚至无法运行的情况。我试图在不发布我所有代码的情况下寻求帮助,这样人们就不必全部阅读(我是初学者,我认为它写得不好——这是我的第一个程序!)。我将用完整的代码覆盖原始帖子,因为这比我最初想象的要复杂。希望即使代码很长且不专业,您仍然会有所帮助:0
【解决方案2】:

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

【讨论】:

  • 抱歉,这是一个复制和粘贴错误。我在 Netbeans 中的代码是 'public static void MethodName1() {'
【解决方案3】:

这里有一个例子解释了你得到的原因以及你得到那个的原因 -

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

}

【讨论】:

  • 谢谢@Ashutosh Kumar Sharma 这对我有用:静态双公斤;静态双总计; public static void main(String args[]){ Scanner sc = new Scanner(System.in);公斤= sc.nextDouble; totalIn = sc.nextDouble();我仍然有点不确定为什么我只需要声明变量并初始化它们?他们也许会自动初始化?
  • 如果您在类级别定义一个变量,那么它将使用其默认值初始化,即使对于较低范围的变量(如方法级别变量)不会发生这种情况。对于您的问题,您必须更新变量到您要分配的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2020-11-22
  • 2021-03-30
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多