我正在尝试添加从多个if语句中获取的多个值。所以我用if语句尝试了它,我得到一个错误,即totaltopFinal和totaltopFinal1的值没有在代码行'overallCompletion = totaltopFinal + totaltopFinal1'中初始化,实际上他们有基于用户输入的值通过如果声明。
以下是代码部分:
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;
}
答案 0 :(得分:0)
您可以在else
中初始化它,也可以在声明时初始化它:
double totaltopFinal = 0;
double totaltopFinal1 = 0;
如果不这样做,则无法保证t
为30或45,因此totaltopFinal
和totaltopFinal1
可能无法按照编译器的报告进行初始化。
答案 1 :(得分:0)
首先,我个人将这些块重新表示为“切换”块,这使得它更具可读性。
据说你得到的例外的原因正如Ziya Wei所提到的那样:“编译器无法知道你的变量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
}
替代这个,这将是在循环之前给出一个初始值,正如Ziyao Wei在前面的回答中提到的那样。作为最后的评论,您可能希望阅读变量范围/可见性以清除一些内容。
答案 2 :(得分:0)
Java正在抱怨totaltopFinal
和totaltopFinal1
可能尚未在您尝试使用它们来计算overallCompletion
时进行初始化。一个可能的解决方案是在while
循环之前将它们初始化为某个初始值(如0)。
您的代码还有另一个问题。假设在循环开始时t
具有不等于30和45的非零值:您的循环永远不会结束!
我建议你仔细检查一下你要用这段代码实现的目标。