Java 通过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

我试图添加从多个if语句中获取的多个值。因此,我用just-if语句进行了尝试,得到一个错误,即totaltopFinal和totaltopFinal1的值没有在代码行“overallCompletion=totaltopFinal1+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
可能不会按照编译器的报告进行初始化。

首先,我个人将这些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语句之后调用它们吗?