Java 读取带有逗号和空格的文本文件以计算GPA

Java 读取带有逗号和空格的文本文件以计算GPA,java,file-io,bufferedreader,filereader,stringtokenizer,Java,File Io,Bufferedreader,Filereader,Stringtokenizer,我需要使用缓冲读取器和文件读取器,并在如下列下格式化它 System.out.println(" Name GPA Classes Hours/Grades" System.out.println(" ------------------ ---- -------- ------------------------ "); 下面是我想计算平均成绩的方法。 将信用等级的分值乘以学分。结果就是获得了质量分数。 学期的总学时数;本学期的总质量

我需要使用缓冲读取器和文件读取器,并在如下列下格式化它

System.out.println("    Name               GPA  Classes        Hours/Grades" 
System.out.println("    ------------------ ---- -------- ------------------------ ");
下面是我想计算平均成绩的方法。 将信用等级的分值乘以学分。结果就是获得了质量分数。 学期的总学时数;本学期的总质量分数。 将总质量分数除以总学时

以下是文本文件中的信息:

Anagram,Anna,3/A,4/A,3/A,3/A,3/A
Boop,Betty,3/B,3/B,4/B,3/B,3/B,1/B
Chitwilly,Cindy,4/C,3/C,3/C,3/C,3/C
Downer,Debbie,3/D,4/D,4/D,3/D,1/D
Everhappy,Eva,4/B,3/B,3/D
Froghat,Freda,3/F,4/F,4/F,3/F
Getterdone,Gina,4/B,4/B,3/B,3/B,3/C
Hotentott,Heidi,3/D,4/D,4/C,3/C,1/B
Imagooden,Inga,4/B,4/B
Jitterbug,Jeannie,3/B,3/C,4/C,3/F,3/C,1/C
Keeper,Kendra,3/A,3/B,3/C
Lovermore,Lynda,4/A,4/B,4/C,4/D
Moocher,Minnie,3/B,3/C,3/D
Nussbaum,Nancy,4/C,4/D,4/F
Oglethorpe,Olga,3/B
Poppledooper,Penny,3/D,3/F
Qutie,Quinn,2/A,4/C,2/F
这是我的第一次尝试。我在这方面是新手,但我真的很想理解这一点,因为我的教授对这一点解释得不够透彻

import java.io.*;
import java.util.StringTokenizer;
    public class p02gpa {

        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub

                String         file = "p02-grades.txt";
                BufferedReader br   = new BufferedReader(new      FileReader(file));
                String          rec;

                String          fmt = "%2d: %-12s %3d %-8s %-20 %n";

                System.out.println("    Name               GPA  Classes        Hours/Grades");
                System.out.println("    ------------------ ---- -------- ------------------------ ");

                while((rec=br.readLine())!= null)
                    calcDisp(rec);

                br.close();

                  }
                  //----------------------------------------------------------------------------
                  public static void calcDisp(String rec)
                  {
                        StringTokenizer tok;
                        String          name;
                        String          fname;
                        String          lname;
                        double          ptValue;
                        double          classes;
                        double          qualtyPts;
                        double          hours;
                        double          gpa;
                        int             ctr=0;

                        tok     = new StringTokenizer(rec,",|/|");
                        lname   = tok.nextToken();
                        fname   = tok.nextToken();
                        name    = fname+ " "+lname;
                        System.out.println(name);
                        ctr++;

                        while(tok.hasMoreTokens())
                        {
                            String nameS =tok.nextToken();
                            String letterGrade =tok.nextToken();
                            System.out.println(letterGrade);
                            String hrsStr = tok.nextToken();
                            hours =Integer.parseInt(hrsStr);

                            System.out.println(hours);


                            if(letterGrade == "A")
                                ptValue = 4.0;

                            if(letterGrade == "B")
                                ptValue = 3.0;

                            if(letterGrade == "C")
                                ptValue = 2.0;

                            if(letterGrade == "D")
                                ptValue = 1.0;

                            if(letterGrade == "F")
                                ptValue = 0.0;



                              qualtyPts = ptValue * hours;
                              gpa = qualtyPts / hours;

你打算向我们展示你自己的代码,试图用你的问题来解决这个问题,并提出一个可回答的具体问题,对吗?我投票结束这个问题,作为离题,因为正如所写的,它只不过是一个无耻的家庭作业堆。我用我的尝试和我的场景的解释来编辑它。这是为了更好地理解我几天后的实际操作。您的代码的一个问题是,您正在使用
==
检查字符串等价性,而不是使用
equals(…)
equalsIgnoreCase(…)
方法。了解
=
检查两个[i]对象引用[/i]是否相同,这不是您感兴趣的。另一方面,方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题。另一个问题是,您发布的代码未完成,只是结束,结束时没有大括号,因此是无法编译和无法命名的。请尝试在您的答案中加入注释/解释,以帮助其他人理解。
import java.io.*;
import java.util.StringTokenizer;
public class p02gpa
{
public static void main(String[] args) throws IOException 
{
String  file = "p02-grades.txt";
BufferedReader br   = new BufferedReader(new      FileReader(file));
String          rec;
String          fmt = "%2d: %-12s %3d %-8s %-20 %n";
System.out.println("    Name               GPA  Classes        Hours/Grades");
System.out.println("    ------------------ ---- -------- ------------------------ ");
while((rec=br.readLine())!= null)
calcDisp(rec);
br.close();
}
public static void calcDisp(String rec)
{
StringTokenizer tok;
String          name;
String          fname;
 String          lname;
 double          ptValue=0;
double          classes;
double          qualtyPts;
 double          hours;
double          gpa;
int             ctr=0;
tok     = new StringTokenizer(rec,",|/|");
lname   = tok.nextToken();
fname   = tok.nextToken();
name    = fname+ " "+lname;
System.out.print(name);
ctr++;
while(tok.hasMoreTokens())
{
 String nameS =tok.nextToken();
String letterGrade =tok.nextToken();
System.out.print(letterGrade);
hours =Integer.parseInt(nameS);
System.out.print(hours);
if(letterGrade == "A")
ptValue = 4.0;
if(letterGrade == "B")
ptValue = 3.0;
if(letterGrade == "C")
ptValue = 2.0;
if(letterGrade == "D")
 ptValue = 1.0;
if(letterGrade == "F")
ptValue = 0.0;
qualtyPts = ptValue * hours;
gpa = qualtyPts / hours;
}
System.out.println("");
}
}