我有一个基本上类似于学生成绩单的文本文件,但我只需要打印学生,课程编号,然后按以下格式打印课程:
学生A:课程数
课程标题1
课程标题2
等。
学生B:课程数
课程标题1
课程标题2
等。
C学生:课程数
课程标题1
课程标题2
等。
这是文本文件的一部分:
学生A,成绩,学分
计算机应用程序,A,1
职业调查第一,A,1阶段
英语9,A,1
世界历史II,A,1
地球科学,A,1
西班牙语I,A,1
第I,A,1条
健康与体育9,B,1
计算机信息系统,A,1
英语10荣誉,A,1
几何,B,1
世界历史I,A,1
生物学,A,1
西班牙语II,A,1
第二条,A,1
健康与体育10,B,1
“设计,多媒体和Web技术”,C,1
弗吉尼亚州和美国历史,A,1
代数II,A,1
化学I,A,1
西班牙语III,A,1
创业教育,A,1
高级创业教育,A,1
荣誉英语12,A,1
经济和个人理财,A,1
AP英语语言和作文,A,1
美联社政府与政治:US,A,1
数学分析/微积分,A,1
物理I,A,1
A,1时装职业介绍
烹饪艺术概论,A,1
职业解释-第二阶段,A,1
到目前为止,我的代码仅打印整个文件。我试过使用system.out.println() 在其他地方,但没有任何效果。这是我目前的代码。
import java.io.*;
import java.util.*;
import java.util.Scanner;
public class Phase1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException {
// TODO code application logic here
Scanner file = new Scanner(new
FileReader("C:\\Users\\coderva.org\\Downloads\\FakeData.csv"));
ArrayList<Student> students = new ArrayList<Student>();
while(file.hasNextLine())
{
String line = file.nextLine();
String[] lines = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
System.out.println(line);
}
}
class Course
{
private char grade;
private double credit;
private String title;
public Course()
{
title = "";
grade = 'I';
credit = 0;
}
public Course(String title, char grade, double credit)
{
this.title= title;
this.grade = grade;
this.credit = credit;
}
public String getTitle()
{
return title;
}
public char getGrade()
{
return grade;
}
public double getCredit()
{
return credit;
}
public String toString()
{
return title + " " + grade + " " + credit;
}
}
class Student
{
private String name;
private ArrayList<Course> courses;
public Student()
{
name = null;
courses = null;
}
public Student(String name, ArrayList<Course> courses)
{
this.name = name;
this.courses = courses;
}
public void setName(String name)
{
this.name = name;
}
public void setCourses(ArrayList<Course> courses)
{
this.courses = courses;
}
public String getName()
{
return name;
}
public ArrayList<Course> getCourses()
{
return courses;
}
}
}
答案 0 :(得分:0)
好的,因此在您的代码中,您创建了一个名为Phase1的主类,一个名为Course的课程类以及一个名为Student的学生类。创建这些类的想法是正确的。基本上,在您的主类中,您想遍历输入文件的每一行并解析其内容。您需要确定输入文件的行是新学生还是将添加到当前学生的课程。如果该行包含一个新学生,则需要使用您的Student类创建一个新的学生对象。否则,您需要使用课程课程来添加新课程,以添加到学生的课程列表中。解析完整个文件后,您就可以遍历学生列表以及每个学生所拥有的课程列表。
第1阶段的课程:
import java.io.*;
import java.util.*;
import java.util.Scanner;
public class Phase1 {
public static void main(String[] args) throws FileNotFoundException {
Scanner file = new Scanner(new FileReader("data.txt"));
ArrayList<Student> students = new ArrayList<Student>();
int currStudent = -1;
while(file.hasNextLine()) {
String line = file.nextLine();
String[] split = new String[3];
//Parse the line input, check if a course name has a comma (it has a comma if it is in quotation marks), otherwise proceed normally
if(line.indexOf('"') == -1) {
split = line.split(",");
} else {
split[0] = line.substring(line.indexOf('"')+1, line.lastIndexOf('"'));
split[1] = line.substring(line.lastIndexOf('"')+2, line.lastIndexOf(','));
split[2] = line.substring(line.lastIndexOf(',')+1,line.length());
}
//If the line contains a new student, create the student
if(split[0].contains("Student")) {
students.add(new Student(split[0],new ArrayList<Course>()));
currStudent++;
continue;
}
//Add course to the current student
students.get(currStudent).addCourse(split[0], split[1].charAt(0), Double.parseDouble(split[2]));
}
//Print all students
for(Student s : students) {
System.out.println(s.getName() + ": " + s.getCourses().size());
//Print all courses for each student
for(Course c : s.getCourses()) {
System.out.println(c.getTitle());
}
System.out.println();
}
file.close();
}
}
课程(与上述课程相同)
public class Course
{
private char grade;
private double credit;
private String title;
public Course() {
title = "";
grade = 'I';
credit = 0;
}
public Course(String title, char grade, double credit) {
this.title= title;
this.grade = grade;
this.credit = credit;
}
public String getTitle() {
return title;
}
public char getGrade() {
return grade;
}
public double getCredit() {
return credit;
}
public String toString() {
return title + " " + grade + " " + credit;
}
}
学生类(稍作修改-将setCourses更改为addCourse):
import java.util.*;
public class Student {
private String name;
private ArrayList<Course> courses;
public Student() {
name = null;
courses = null;
}
public Student(String name, ArrayList<Course> courses) {
this.name = name;
this.courses = courses;
}
public void setName(String name) {
this.name = name;
}
public void addCourse(String title, char grade, double credit) {
this.courses.add(new Course(title,grade,credit));
}
public String getName() {
return name;
}
public ArrayList<Course> getCourses() {
return courses;
}
}
如果您对理解代码有任何疑问,请告诉我!