2012-01-27 3 views
0

Я пытаюсь добавить несколько значений, которые я получаю из нескольких операторов if. Поэтому я попробовал это с помощью только операторов, и я получаю сообщение об ошибке, что значения totaltopFinal и totaltopFinal1 не были инициализированы в строке кода «generalCompletion = totaltopFinal + totaltopFinal1», когда на самом деле они имеют значения, основанные на пользовательском вводе через если утверждения.Сохранение значений через оператор if

Вот часть кода:

while(t !=0){ 
     if(t == 30){ 
      //Loop for parameters of array 
      System.out.println("What is the number of students taking the exam?"); 
      BufferedReader st = new BufferedReader(new InputStreamReader(System.in)); 
      String d = null; 
      try { 
       d =st.readLine(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      int s = Integer.parseInt(d); 


      totalTop = thirtyMin[0] * s; 
      totalTop1 = totalTop * constPercent[0]; 
      totalTop2 = thirtyMin[1] * s; 
      totalTop3 = totalTop2 * constPercent[1]; 
      totalTop4 = thirtyMin[2] * s; 
      totalTop5 = totalTop4 * constPercent[2]; 
      totalTop6 = thirtyMin[3] * s; 
      totalTop7 = totalTop6 * constPercent[3]; 
      totalStudents = s + totalStudents; 
      totaltopFinal = totalTop1 + totalTop3 + totalTop5 + totalTop7; 

      averageTotal = totaltopFinal/totalStudents; 
      x = Math.log(averageTotal); 
      almostTotal = -21.6 * x; 
      completeTotal = almostTotal + 156.8; 

      System.out.println("The average of students who can take an exam in a hour is:" + completeTotal); 
} 
     if(t == 45){ 
      //Loop for parameters of array 
      System.out.println("What is the number of students taking the exam?"); 
      BufferedReader st = new BufferedReader(new InputStreamReader(System.in)); 
      String d = null; 
      try { 
       d =st.readLine(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      int s = Integer.parseInt(d); 


      totalTop = thirtyMin[0] * s; 
      totalTop1 = totalTop * constPercent[0]; 
      totalTop2 = thirtyMin[1] * s; 
      totalTop3 = totalTop2 * constPercent[1]; 
      totalTop4 = thirtyMin[2] * s; 
      totalTop5 = totalTop4 * constPercent[2]; 
      totalTop6 = thirtyMin[3] * s; 
      totalTop7 = totalTop6 * constPercent[3]; 
      totalStudents = s + totalStudents; 
      totaltopFinal1 = totalTop1 + totalTop3 + totalTop5 + totalTop7; 
} 
     overallCompletion = totaltopFinal + totaltopFinal1; 
} 
+1

где вы объявили totaltopFinal и totaltopFinal1 – varatis

+0

Я объявил их в начале программы. Я просто объявил их двойником. – thehoule64

+0

Это домашнее задание? В этом случае вы должны пометить его «домашней работой». – posdef

ответ

0

Вы можете инициализировать его в else или инициализировать его при объявлении:

double totaltopFinal = 0; 
double totaltopFinal1 = 0; 

Если нет, то это не гарантирует, что t будет 30 или 45, поэтому totaltopFinal и totaltopFinal1 могут не инициализироваться, как сообщается компилятором.

+0

За исключением того, что мне нужен способ сохранить эти значения. Есть ли другой способ, чтобы я мог кодировать его так, чтобы после каждого ввода и математического процесса он сохранял эти значения, чтобы я мог использовать все эти значения для вычисления полной суммы? – thehoule64

+0

Я не думаю, что получаю то, что вы сказали, но как же просто хранить их во временных переменных? –

+0

Могу ли я вызвать тех, кто после утверждения if? – thehoule64

0

Сначала я лично переформулировал эти блоки if к блоку «switch», что делает его немного читабельнее.

Это, сказал, что причина для исключения вы получите точно как Зия Вэй отметил: «компилятор не имеет возможности узнать, является ли ваша переменная t будет иметь такие значения, что условия (t==30) и (t==45) будут держать во время выполнения . Ваша программы в таком случае нет никакой гарантии, что линия overallCompletion = totaltopFinal + totaltopFinal1; можно вычислить, так как переменные totaltopFinal и totaltopFinal1 не имеет значения существующего

Попробуйте что-то вроде этого:.

double myVariable; 
while(t!=0){ 
    switch(t){ 
    case(30): 
     // do stuff 
     myVariable = X; 
     break; 
    case(45): 
     // do other stuff 
     myVariable = Y; 
     break; 
    default: 
     // do fallback stuff (if necessary) 
     myVariable = Z; 
    } 
    // do whatever you'd like to do with myVariable 
} 

Альтернативой этому было бы дать начальное значение перед циклом, как указано в предыдущем ответе Зияо Вэй. В качестве заключительного комментария вы можете прочитать информацию о переменной scope/visibility, чтобы прояснить некоторые вещи.

0

Java справедливо жалуется, что totaltopFinal и totaltopFinal1, возможно, не были инициализированы в точке, где вы пытаетесь использовать их для вычисления overallCompletion. Возможным решением может быть инициализация их до некоторого начального значения (например, 0) перед циклом while.

У вашего кода также есть другая проблема. Предположим, что в начале цикла t имеет отличное от нуля значение, отличное от 30 и 45: Ваша петля никогда не закончится!

Предлагаю внимательно ознакомиться с тем, что вы пытаетесь достичь с помощью этого фрагмента кода.

Смежные вопросы