Прежде всего, я бы лично переформулировал эти блоки 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
}
В качестве альтернативы это может дать начальное значение перед циклом, как упоминалось в предыдущем ответе Зияо Вэя. В качестве последнего комментария вы можете прочитать о переменной области/ видимость, чтобы прояснить некоторые вещи.