【问题标题】:Java project using read file, write file and arrays使用读取文件、写入文件和数组的 Java 项目
【发布时间】:2015-04-05 16:47:49
【问题描述】:

我有一个任务,我遇到了很多麻烦,真的需要一些帮助,我已经完成了,但现在卡住了,已经卡了好几天了。这是简介。

非理性研究学位第一年的学生学习两个模块:IR101 和 IR102。评估规则规定如下: 学生必须通过两个模块才能进入第 2 阶段。 一个模块的及格分数是 40。 未通过两个模块的学生将被视为不及格。 仅通过两个模块之一的学生将被允许重考。 两个模块都未通过的学生将被要求重复这一年。 通过这两个模块的学生将根据他们的总分获得一个班级,使用以下等级: 70 – 100 第一 60 – 69.9 2.1 50 – 59.9 2.2 40 – 49.9 第三 总分是两个模块分的平均值 参加非理性研究的学生名单包含在以下文件中。文件的每一行都包含一个学生 ID 号(一个整数),后跟学生的姓名(一个字符串)。

IRstudent.txt 包括: 25987艾伦 25954 贝蒂 25654 克里斯 25622 大卫 25321 艾尔西 25220 菲奥娜 25212 格雷格 25218 海伦 25147 伊恩 25196 吉姆

学生获得的分数包含在以下两个文件中。每行包含学生的身份证号码,后跟他们获得的分数(双)。 (注意学生在三个文件中出现的顺序并不相同。)

IR101.txt 包括: 25220 68.3 25212 70.5 25218 62.1 25147 38.3 25196 52.0 25987 35.6 25954 70.2 25654 58.6 25622 65.0 25321 51.5

IR102.txt 包括: 25987 20.7 25954 63.4 25218 53.4 25147 47.5 25196 49.8 25654 35.1 25622 57.8 25321 45.6 25220 75.6 25212 72.5

你的任务是编写一个程序,从这三个文件中读取信息,并输出一个成绩单列表,按照聚合标记的降序排列,到当前目录中名为“RankedList.txt”的文件中。 成绩单包括三行: 第 1 行:学生 ID 后跟学生姓名 第 2 行:两个模块标记后跟总标记 标记应在小数点后显示一位。 第 3 行:课程和结果。 等级应该是 Fail、3rd、2.1、2.2 或 1st。 结果应该是重复一年、重新参加指定的考试或进入第 2 阶段。 在成绩单列表中,每份成绩单应以一行“-”隔开。以下是从此类列表中提取的示例:

37695 亚里士多德 IR101 52.0 IR102 49.8 合计 50.9 课程:2.2 结果:进入第 2 阶段

37622 苏格拉底 IR101 38.3 IR102 47.5 合计 42.9 班级:失败结果:重考 IR101

您可以假设输入文件没有错误。

现在 iv 已经打开文件并阅读它们,但从那里卡住了。到目前为止,这是我的代码。

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


public class Task2 {

public Scanner input;
int reg;
double ir101,ir102l;
double aggregate;
String student_name;
ArrayList<Student> students = new ArrayList<Student>();

public void openIRstud()throws Exception{
    JFileChooser IRstudchooser = new JFileChooser();
    if(IRstudchooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
        java.io.File inFile = IRstudchooser.getSelectedFile();
        input = new Scanner(inFile);
        System.out.println("IRstudents file read successfully.");
    }
}
public void openIR101()throws Exception{
    JFileChooser IR101chooser = new JFileChooser();
    if(IR101chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
        java.io.File inFile = IR101chooser.getSelectedFile();
        input = new Scanner(inFile);
        System.out.println("IR101 file read successfully.");
    }
}
public void openIR102()throws Exception{
    JFileChooser IR102chooser = new JFileChooser();
    if(IR102chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
        java.io.File inFile1 = IR102chooser.getSelectedFile();
        input = new Scanner(inFile1);
        System.out.println("IR102 file read successfully.");
    }
}
public void readIRstud (){
    while(input.hasNext()){
        String irstudid = input.next();
        String irname = input.next();
        System.out.printf(" %s %s\n", irstudid, irname);
    }
    System.out.println("Complete.");
}
public void readIR101 (){
    while(input.hasNext()){
        String ir101studid = input.next();
        String ir101mark = input.next();
        System.out.printf(" %s %s\n", ir101studid, ir101mark);
    }
    System.out.println("Complete.");
}
public void readIR102 (){
    while(input.hasNext()){
        String ir102studid = input.next();
        String ir102mark = input.next();
        System.out.printf(" %s %s\n", ir102studid, ir102mark);
    }
    System.out.println("Complete.");
}
public void Student(){
    while (input.hasNext()) {
        String line = input.nextLine();
        Student e = new Student();
        e.reg = Integer.parseInt(line.split(" ")[0]);
        e.ir101 = Double.parseDouble(line.split(" ")[1]);
        students.add(e);
    }
}
}

这是我的主要内容(到目前为止,这仅测试文件是否被读取,并且它存储在一个数组中,我什至不确定这是否有效)P.S 这是一个单独的类。

import java.io.IOException;


public class Task2test {
    public static void main(String[] args)throws Exception {
    Task2 r = new Task2();

    System.out.println("***** Marks Processing *****");
    System.out.println("Please select a file for IRstudents:");
    r.openIRstud();
    System.out.println("Now reading file IRstudents.");
    r.readIRstud();
    r.Student();

    System.out.println("Please select a file for IR101:");
    r.openIR101();
    System.out.println("Now reading IR101.");
    r.readIR101();
    r.Student();

    System.out.println("Please select a file for IR102:");
    r.openIR102();
    System.out.println("Now reading IR102.");
    r.readIR102();

}
}

任何帮助完成此任务将不胜感激,我已经准备好拔掉我的头发了!谢谢!

【问题讨论】:

  • 不过,我不完全确定您要问的是什么。我可以看到你被卡住了;这就是你问这个问题的原因。但是您遇到的具体问题是什么?
  • 只是知道在点之后该做什么,我不确定如何处理数组等。

标签: java arrays file


【解决方案1】:

你必须首先区分任务。

1 - 定义项目所需的类。

2 - 定义它们的功能。

3 - 读取 IRstudent.txt 文件并创建学生列表。

4 - 读取 IR101.txt 文件并将分数与学生相关联。

5 - 读取 IR102.txt 文件并将分数与学生相关联。

6 - 为学生生成总分和结果类。

7 - 按学生总分排序。

8 - 创建一个新文件 RankedList.txt 来存储结果。

9 - 将学生信息写入此文件。

让我们一步一步来吧。

1 - 定义项目所需的类。

班级学生。

  • idStudent

  • 姓名

  • markIR101

  • markIR102

  • 聚合标记

班级排名表

  • 列表

  • 结果

2 - 定义它们的功能。

班学生

  • List getStudentList(java.io.File irStudentsFile);
  • void setIR101Mark(java.io.File ir101File, List sudents);
  • void setIR102Mark(java.io.File ir102File, List sudents);

班级排名表

  • 列出学生;
  • addStudent(学生学生);
  • orderByAgregateMark();
  • writeToFile();

** 步骤 3、4、5、6 **

这里有一个代码示例来解决你的问题,但我只做了到第 6 步,现在我相信你有条件完成这个项目。

   import java.io.File;
   import java.io.IOException;
   import java.math.BigDecimal;
   import java.math.BigInteger;
   import java.util.LinkedList;
   import java.util.List;
   import java.util.StringTokenizer;
   import java.util.function.Consumer;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   import java.util.stream.Stream;

   public class Student {

private int idStudent;
private String name;
private BigDecimal ir101Mark;
private BigDecimal ir102Mark;
private BigDecimal agregateMark;

public int getIdStudent() {
    return idStudent;
}

public void setIdStudent(int idStudent) {
    this.idStudent = idStudent;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public BigDecimal getIr101Mark() {
    return ir101Mark;
}

public void setIr101Mark(BigDecimal ir101Mark) {
    this.ir101Mark = ir101Mark;
}

public BigDecimal getIr102Mark() {
    return ir102Mark;
}

public void setIr102Mark(BigDecimal ir102Mark) {
    this.ir102Mark = ir102Mark;
}

public BigDecimal getAgregateMark() {
    return agregateMark;
}

public void setAgregateMark(BigDecimal agregateMark) {
    this.agregateMark = agregateMark;
}

public static List<Student> getStudentList(java.io.File irStudentsFile){

    List<Student> students = new LinkedList<>();
    Stream<String> lines;
    try {
        lines = java.nio.file.Files.lines(irStudentsFile.toPath());
    } catch (IOException ex) {
        return null;
    }

    lines.forEach((Consumer<? super String>) line -> 
        {
            Student student = new Student();
            StringTokenizer sToken = new StringTokenizer(line, " ");
            student.setIdStudent(Integer.valueOf(sToken.nextToken()));
            student.setName(sToken.nextToken());

            students.add(student);
        } 

    );

    return students;
}

public static void setIR101Mark(java.io.File ir101File, List<Student> students){
    Stream<String> lines;
    try {
        lines = java.nio.file.Files.lines(ir101File.toPath());
    } catch (IOException ex) {
        return;
    }

    lines.forEach((Consumer<? super String>) new Consumer<String>() {

        @Override
        public void accept(String line) {
            Student student = null;
            StringTokenizer sToken = new StringTokenizer(line, " ");
            int idStudent = Integer.valueOf(sToken.nextToken());

            for (Student student1 : students) {
                if (student1.getIdStudent() == idStudent) {
                    student = student1;
                }
            }

            if (student == null) {
                return;
            }

            student.setIr101Mark(BigDecimal.valueOf(Double.valueOf(sToken.nextToken())));
        }
    }
    );
}

public static void setIR102Mark(java.io.File ir102File, List<Student> students){
    Stream<String> lines;
    try {
        lines = java.nio.file.Files.lines(ir102File.toPath());
    } catch (IOException ex) {
        return;
    }

    lines.forEach((Consumer<? super String>) new Consumer<String>() {

        @Override
        public void accept(String line) {
            Student student = null;
            StringTokenizer sToken = new StringTokenizer(line, " ");
            int idStudent = Integer.valueOf(sToken.nextToken());

            for (Student student1 : students) {
                if (student1.getIdStudent() == idStudent) {
                    student = student1;
                }
            }

            if (student == null) {
                return;
            }

            student.setIr102Mark(BigDecimal.valueOf(Double.valueOf(sToken.nextToken())));
        }
    }
    );
}

public static void agregateMark(List<Student> students){
    students.forEach(student ->{
        BigDecimal agregate = 
                student.getIr101Mark()
                .add(student.getIr102Mark())
                .divide(BigDecimal.valueOf(Double.valueOf(2)));

        student.setAgregateMark(agregate);
    });
}

public static void main(String args[]){
    File irStudentFile = new File("D:\\IRstudent.txt");
    File ir101File = new File("D:\\IR101.txt");
    File ir102File = new File("D:\\IR102.txt");
    List<Student> students = Student.getStudentList(irStudentFile);
    Student.setIR101Mark(ir101File, students);
    Student.setIR102Mark(ir102File, students);
    Student.agregateMark(students);



    System.out.println("*** List of students ***");
    students.forEach(student -> {
        System.out.println("id: " + student.getIdStudent());
        System.out.println("Name: " + student.getName());
        System.out.println("IR 101 Mark: " + student.getIr101Mark());
        System.out.println("IR 102 Mark: " + student.getIr102Mark());
        System.out.println("Agregate Mark: " + student.getAgregateMark());
        System.out.println("----------------------------------------------");
    });
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2015-03-14
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多