2013-04-18 173 views
0

java方法statithing,但我似乎无法让我的第56行的while语句正确调用我的方法。有什么我做错了吗?我对Java非常陌生,所以不胜感激!提前致谢! 这里是我的代码:为什么我的程序不能调用我的方法?

import java.util.*; 
import javax.swing.*; 
import java.io.*; 

public class GradeCalculator { 
    static String fileInput; 
    static double totalGrade; 
    static int scoreCount= 0; 
    static double classAverage; 
    static double score; 
    static double testScore; 
    static double averageScore; 
    static int numberOfStudents = 0; 
    static char letterGrade; 
    static String fileOutput; 
    static String nameOfStudent; 
    static int numberCount; 
    static int numberCalculatedStudents; 
    static double average = 0; 

    public static void main (String[] args) throws FileNotFoundException { 
    //Welcome 

    JOptionPane.showMessageDialog(null,"Welcome to the Grade Calculator! This program will\n" + 
               " calculate the average percentage of 5 test scores that\n"+ 
               " are given in a given file once these scores are\n"+ 
               " averaged it will give the student a letter grade.","Welcome!",JOptionPane.PLAIN_MESSAGE); 
    fileInput = JOptionPane.showInputDialog(null, "Please enter the name of the input file you wish to use for this program." 
              ,"Input File",JOptionPane.PLAIN_MESSAGE); 
    fileOutput = JOptionPane.showInputDialog(null, "Please enter the name of the output file you wish to use for this program." 
              ,"Output File",JOptionPane.PLAIN_MESSAGE); 
    //preparing text files 
    PrintWriter outFile = new PrintWriter (fileOutput);           
    File inFile = new File (fileInput); 

    Scanner reader = new Scanner(new FileReader(fileInput)); 
    outFile.println("Student Name Test1 Test2 Test3 Test4 Test5 Average Grade"); 

    while(reader.hasNextLine()) { 
     nameOfStudent = reader.next(); 
     outFile.printf("%n%n%s",nameOfStudent); 
     numberOfStudents++; 
     score = reader.nextDouble(); 
     calculateAverage(score); 
     calculateGrade(averageScore); 
     outFile.printf("        %.2f ", averageScore); 
     outFile.println("                "+letterGrade); 
    } 
    classAverage = classAverage/numberCalculatedStudents;  
    outFile.print("\n\n\n\n\n\n\n\n\n\n\n\nClass average for "+ numberCalculatedStudents + "of" + numberOfStudents + "is" + classAverage); 
    JOptionPane.showMessageDialog(null,"The report has successfully been completed and written into the file of " + fileOutput +"." 
                +" The class average is " + classAverage + ". Please go to the output file for the complete report."); 
    outFile.close(); 
    } 

    public static void calculateAverage(double score) throws FileNotFoundException { 
     Scanner reader = new Scanner(new FileReader(fileInput)); 
     PrintWriter outFile = new PrintWriter (fileOutput); 
     while (reader.hasNextDouble() && numberCount <= 5) { 
      score = reader.nextDouble(); 
      numberCount++; 
     if (score >= 0 & score <= 100) { 
       outFile.printf("%10.2f",score); 
      scoreCount++; 
      average = score + average; 
     } 
     else 
      outFile.printf("    **%.2f",score); 
     } 
     if (average!=0){ 
      numberCalculatedStudents++; 
      average = average/scoreCount; 
      averageScore = average; 
      classAverage = average + classAverage; 
      } 

      average = 0; 
    } 

    public static char calculateGrade (double averageScore) { 

     if (averageScore >= 90 && averageScore <= 100) 
      letterGrade = 'A'; 
     else if (averageScore < 90 && averageScore >= 80) 
      letterGrade = 'B'; 
     else if (averageScore < 80 && averageScore >= 70) 
      letterGrade = 'C'; 
     else if (averageScore < 70 && averageScore >= 60) 
      letterGrade = 'D'; 
     else if (averageScore < 60 && averageScore >= 0) 
      letterGrade = 'F'; 
     else 
      letterGrade =' '; 

     return letterGrade; 
    } 
} 
+1

哪一行是56? –

+0

难道你不能告诉我们问题在哪里,而不是引用行号? – maba

+0

56是哪里? – drewmoore

回答

0

不知道哪一行的问题引起的,有两个问题我跳出:

在while循环的顶部:

if (score >= 0 & score <= 100) 
    { outFile.printf("%10.2f",score); 
     scoreCount++; 
     average = score + average; 
    } 
    else 
     outFile.printf("    **%.2f",score);} 

你在else语句后有一个近括号(}),但没有开括号。因此,左括号看起来像它在你想要的时候退出while循环。其次,它看起来像你正在试图在你的CalculateGrade方法中返回一些东西(也就是一个char),但是你已经指定了返回类型的void,这意味着即使你有一个return语句,也不会有任何东西当你调用它时会返回。您不会显示您调用该方法的位置,因此我不能确定这是否会造成问题,但它确实存在疑问。好像你要使用:的

public static char calculateAverage(double score) throws FileNotFoundException{ 

代替public static void calculateAverage(double score)...

而且,是有一个原因,所有这些方法是静态的?你知道什么是静态的吗?

EDIT(根据您的评论):

号使一个变量static使其成为一个“类变量”,这意味着,只有其中一个存在该类的所有对象。为了说明:

如果你有一个这样的类:

class test { 
static int id; 
} 

并运行下面的代码:

test t1 = new test(); 
    test t2 = new test(); 

    t1.id = 4; 
    t2.id = 8; 

    System.out.println(t1.id); 

将打印8.这是因为,由于ID是一个static在类的任何对象上改变它的变量都会导致它为类的每个其他对象改变。

这与“实例变量”相反,其中每个对象都有一个“实例变量”。要使id成为实例变量,只需删除static关键字。如果你这样做并运行相同的代码,它将打印4,因为改变t2的实例变量对t1没有影响。

有意义吗?

相关问题