2012-01-27 71 views
0

我试图添加从多个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; 
} 
+1

你在哪里宣布totaltopFinal和totaltopFinal1 – varatis 2012-01-27 23:43:49

+0

我在程序开始时声明了它们。我只是宣布他们是一个双。 – thehoule64 2012-01-27 23:46:39

+0

这是一项家庭作业吗?在这种情况下,你应该用“作业”来标记它。 – posdef 2012-01-27 23:55:22

回答

0

你可以将其初始化一个else或初始化它同时宣称:

double totaltopFinal = 0; 
double totaltopFinal1 = 0; 

如果没有,有没有保证t将是30或45,所以totaltopFinaltotaltopFinal1可能未被编译器报告初始化。

+0

除了我需要一种方法来保持这些值。是否还有另一种方法可以编写代码,以便在每次输入和数学过程之后保留这些值,以便我可以使用所有这些值来计算完整的总数? – thehoule64 2012-01-27 23:49:21

+0

我不认为我得到你所说的,但如何将它们存储在临时变量中呢? – 2012-01-27 23:54:54

+0

我可以在if语句后求助那些人吗? – thehoule64 2012-01-28 00:00:24

0

首先,我会亲自将这些if块重新配置到“开关”块,这使得它更具可读性。

话虽这么说,你所得到异常的原因是完全一样的子牙炜提到:“编译器无法知道是否您的变量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 
} 

另外这个可能是在前面的回答中提到的一个初始值。作为最后的评论,您可能需要阅读变量范围/可见性以清除某些内容。

0

Java正确地抱怨totaltopFinaltotaltopFinal1在您尝试使用它们计算overallCompletion时可能尚未初始化。一个可能的解决方案可能是在你的while循环之前将它们初始化为一些初始值(如0)。

您的代码还有另一个问题。假设在循环开始处t有一个非零值,与30和45不同:您的循环将永远不会结束!

我建议你仔细检查你想用这段代码实现什么。