要求编写一个程序,从一个文件读取每个学生的多次测试成绩。该程序要求能计算出每个学生的平均成绩,并且可以按照90-100为A,80-89为B以此类推为平均成绩划分等级需要在程序中编写一个 void method, calculateAverage ,用其计算学生的5门课的平均成绩。用一个循环读取并相加5次成绩(该方法不输出成绩,输出成绩必须在main中完成)需要在程序中编写一个 value-return method, calculateGrade, 用其返回学生平均成绩的等级(该方法不输出等级,输出等级必须在main中完成)需要读取的文件(CH07EX14data.txt)为:Johnson 85 83 77 91 76
Aniston 80 90 95 93 48
Cooper 78 81 11 90 73
Gupta 92 83 30 69 87
Blair 23 45 96 38 59
Clark 60 85 45 39 67
Kennedy 77 31 52 74 83
Bronson 93 94 89 77 97
Sunny 79 85 28 93 82
Smith 85 72 49 75 63要求输出的格式为:student  test1  test2   test3  test4  test5  Average Grade
Johnson     85     83      77     91     76
Aniston     80     90      95     93     48



。程序的大致结构要求为:import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;public class CH07EX14 {
// main will public static void main(String[] args) throws Exception { // create a place to hold a student's average that can be shared
DoubleClass studentAverage = new DoubleClass(); // establish connections to the input file and destination file
Scanner studentGrades = new Scanner(new FileReader(
"chapt07//CH07EX14data.txt"));
PrintWriter outFile = new PrintWriter("chapt07//CH07EX14out.txt");
// for each student while (studentGrades.hasNext()) { // 1 read student's name from input source // 2 call calculateAverage sending place to put student's numeric
// average, the place it's supposed to get data from, and a place to
// put
// output
calculateAverage(studentGrades, studentAverage, outFile); // 3 call calculateGrade sending student's numeric average and
// receiving
// letter grade for student
String studentGrade = calculateGrade(studentAverage); // 4 output student's letter grade (named studentGrade above).
}
// output the class average } // Accept parameters --- determine the average of 5 test scores for each
// student. Output the scores but not the average for each student.
// I'll need to know where to get the input from (a file), where I'm
// supposed to put
// the calculated average for each student, and where I should output each
// student's individual test scores (a file) private static void calculateAverage(Scanner input,
DoubleClass aDoubleClass, PrintWriter destination) {
// concensus was that a for loop would be good for reading 5 grades
} private static String calculateGrade(DoubleClass aDoubleClass) {
// class opinion that this is a selection structure
return "";
}
}========================================================================
下面是我编的。。有很多问题。。希望前辈们指点~~~import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;public class CH07EX14 
{ public static void main (String[] args)
                                        throws FileNotFoundException    {

DoubleClass studentAverage = new DoubleClass();

Scanner studentGrades = new Scanner(new FileReader(
"d:\\CH07EX14data.txt"));
PrintWriter outFile = new PrintWriter("d:\\CH07EX14out.txt");

while (studentGrades.hasNext())
{
String name = studentGrades.next(); calculateAverage(studentGrades, studentAverage, outFile);
String studentGrade = calculateGrade(studentAverage);

outFile.printf(studentGrade);
}

        outFile.printf("Student test1, test2, test3, test4, test5, average, grade");   // 这边输出有点疑惑,不知道怎么写

    }

private static void calculateAverage(Scanner input,
DoubleClass aDoubleClass, PrintWriter destination) {
{        double test,sum=0;
        int i;
for(i=1;i<=5;i++);
{test=input.nextDouble();
 sum=sum+test;
}
aDoubleClass.setDouble(sum/5);
}
}
private static String calculateGrade(DoubleClass aDoubleClass) {
// class opinion that this is a selection structure
String grade;
double average=aDoubleClass.getNum();
if(average<=100||average>=90)
grade= "A";
else
if(average<90||average>=80)
    grade= "B";
else
        if(average<80||average>=70)
     grade= "C";
        else
         if(average<70||average>=60)
               grade= "D";
         else
         grade=" E";

return grade;
    
}
}

解决方案 »

  1.   

    测试通过:import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import java.util.Scanner;public class CH07EX14 { public static void main(String[] args) throws Exception { double studentAverage ; Scanner studentGrades = new Scanner(new FileReader(
    "d:\\CH07EX14data.txt"));
    BufferedWriter outFile = new BufferedWriter(new FileWriter("d:\\CH07EX14out.txt"));
    outFile
    .write("Student \t test1 \t test2 \t test3 \t test4 \t test5 \t average \t grade\r\n");   while (studentGrades.hasNext()) {
    String name = studentGrades.next();
    outFile.write(name+"\t\t ");
    studentAverage=calculateAverage(studentGrades, outFile);
    String studentGrade = calculateGrade(studentAverage); outFile.write(studentAverage+"\t\t "+studentGrade+"\r\n");
    } outFile.close();
    studentGrades.close();

    } private static double calculateAverage(Scanner input,
     BufferedWriter destination) throws Exception{
    { double test, sum = 0;
    int i;
    for (i = 1; i <= 5; i++)
    {
    test = input.nextDouble();
    destination.write(test+"\t ");
    sum = sum + test;
    }
    return (sum / 5);
    }
    } private static String calculateGrade(double average) {
    // class opinion that this is a selection structure 
    String grade;
    if (average <= 100 || average >= 90)
    grade = "A";
    else if (average < 90 || average >= 80)
    grade = "B";
    else if (average < 80 || average >= 70)
    grade = "C";
    else if (average < 70 || average >= 60)
    grade = "D";
    else
    grade = " E"; return grade; }
    }
    几个问题:
    1、你的DoubleClass我没有发现,所以用Double代替了。
    2、我习惯用BufferedWriter,你用PrintWriter也对,这个不影响结果。
    3、
    for(i=1;i <=5;i++); 
    {test=input.nextDouble(); 
    sum=sum+test; 

    aDoubleClass.setDouble(sum/5); 

    } 这个分号所带来的麻烦最大,害我调试了10分钟。