Java 通过if语句保留值
我试图添加从多个if语句中获取的多个值。因此,我用just-if语句进行了尝试,得到一个错误,即totaltopFinal和totaltopFinal1的值没有在代码行“overallCompletion=totaltopFinal1+totaltopFinal1”中初始化,而实际上它们的值是基于用户通过if语句输入的 以下是代码部分:Java 通过if语句保留值,java,if-statement,Java,If Statement,我试图添加从多个if语句中获取的多个值。因此,我用just-if语句进行了尝试,得到一个错误,即totaltopFinal和totaltopFinal1的值没有在代码行“overallCompletion=totaltopFinal1+totaltopFinal1”中初始化,而实际上它们的值是基于用户通过if语句输入的 以下是代码部分: while(t !=0){ if(t == 30){ //Loop for parameters of arra
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
可能不会按照编译器的报告进行初始化。首先,我个人将这些If块重新格式化为“switch”块,这会使它的可读性稍高一些
也就是说,您得到异常的原因正是ZiyaWei提到的:“编译器无法知道变量t
是否会有这样的值,即条件(t==30)
和(t==45)
将在程序执行期间保持不变。在这种情况下,无法保证行总体完成=totaltopFinal+totaltopFinal1;
可以计算,因为变量totaltopFinal1
和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正确地抱怨说,
totaltopFinal1
和totaltopFinal1
可能不是initia在您尝试使用它们来计算总体完成时被初始化。一个可能的解决方案是在while
循环之前将它们初始化为某个初始值(如0)
您的代码还有另一个问题。假设在循环开始时,t
有一个不同于30和45的非零值:您的循环将永远不会结束!
我建议你仔细回顾一下你试图用这段代码实现的目标。你在哪里声明了totaltopFinal和TotalTopFinal1我在课程开始时声明了它们。我只是将它们声明为双精度。这是家庭作业吗?在这种情况下,你应该用“家庭作业”来标记它“。除了我需要一种方法来保持这些值。有没有另一种方法可以让我对它进行编码,这样在每次输入和数学处理之后,它都会保留这些值,这样我就可以使用所有这些值来计算完整的总数?我想我不明白你所说的,但是把它们存储在临时变量中怎么样?我可以在if语句之后调用它们吗?