Проблема инициализации локальных / классовых переменных - PullRequest
0 голосов
/ 23 октября 2019
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'? и что я их инициализирую как? Эти переменные заполняются значениями, введенными пользователем через сканер, если это имеет значение. Пожалуйста, помогите!

Ответы [ 3 ]

0 голосов
/ 23 октября 2019

Объявление метода MethodName1 неверно. Вы пропустили раздел аргументов. Измените его на public static void MethodName1().

0 голосов
/ 23 октября 2019

Вот пример, который объясняет причину, которую вы получаете, и почему вы это получаете -

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;

Причина ясна, если условие в случае, если блок истинен, то тестовое значение будет инициализировано с помощью 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

}
0 голосов
/ 23 октября 2019

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)

Читая вопрос, я понял, что вы, возможно, пытаетесь инициализировать значение внутри условного оператора или цикла. Понимание простыми словами, что происходит, когда условие выполнения инструкции не выполняется? Ответ заключается в том, что значение никогда не инициализируется, что имеет место в данном случае.

...