通过if语句保持价值观

时间:2012-01-27 23:40:49

标签: java if-statement

我正在尝试添加从多个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;
}

3 个答案:

答案 0 :(得分:0)

您可以在else中初始化它,也可以在声明时初始化它:

double totaltopFinal = 0;
double totaltopFinal1 = 0;

如果不这样做,则无法保证t为30或45,因此totaltopFinaltotaltopFinal1可能无法按照编译器的报告进行初始化。

答案 1 :(得分:0)

首先,我个人将这些块重新表示为“切换”块,这使得它更具可读性。

据说你得到的例外的原因正如Ziya Wei所提到的那样:“编译器无法知道你的变量t是否具有条件(t==30)的值并且(t==45)将在您的程序执行期间保留。在这种情况下,无法保证可以计算行overallCompletion = totaltopFinal + totaltopFinal1;,因为变量totaltopFinaltotaltopFinal1不存在值。

尝试这样的事情:

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正在抱怨totaltopFinaltotaltopFinal1可能尚未在您尝试使用它们来计算overallCompletion时进行初始化。一个可能的解决方案是在while循环之前将它们初始化为某个初始值(如0)。

您的代码还有另一个问题。假设在循环开始时t具有不等于30和45的非零值:您的循环永远不会结束!

我建议你仔细检查一下你要用这段代码实现的目标。