保留通过if语句的值
我试图添加从多个if语句获取的多个值。所以我用if语句试了一下,我得到一个错误,说明totaltopFinal和totaltopFinal1没有在代码行'overallCompletion = 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;
}
你可以将其初始化一个else
或初始化它同时宣称:
double totaltopFinal = 0;
double totaltopFinal1 = 0;
如果没有,有没有保证t
将是30或45,所以totaltopFinal
和totaltopFinal1
可能未被编译器报告初始化。
除了我需要一种方法来保持这些值。是否还有另一种方法可以编写代码,以便在每次输入和数学过程之后保留这些值,以便我可以使用所有这些值来计算完整的总数? – thehoule64 2012-01-27 23:49:21
我不认为我得到你所说的,但如何将它们存储在临时变量中呢? – 2012-01-27 23:54:54
我可以在if语句后求助那些人吗? – thehoule64 2012-01-28 00:00:24
首先,我会亲自将这些if块重新配置到“开关”块,这使得它更具可读性。
话虽这么说,你所得到异常的原因是完全一样的子牙炜提到:“编译器无法知道是否您的变量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
}
另外这个可能是在前面的回答中提到的一个初始值。作为最后的评论,您可能需要阅读变量范围/可见性以清除某些内容。
Java正确地抱怨totaltopFinal
和totaltopFinal1
在您尝试使用它们计算overallCompletion
时可能尚未初始化。一个可能的解决方案可能是在你的while
循环之前将它们初始化为一些初始值(如0)。
您的代码还有另一个问题。假设在循环开始处t
有一个非零值,与30和45不同:您的循环将永远不会结束!
我建议你仔细检查你想用这段代码实现什么。
你在哪里宣布totaltopFinal和totaltopFinal1 – varatis 2012-01-27 23:43:49
我在程序开始时声明了它们。我只是宣布他们是一个双。 – thehoule64 2012-01-27 23:46:39
这是一项家庭作业吗?在这种情况下,你应该用“作业”来标记它。 – posdef 2012-01-27 23:55:22