Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何存储文件数据行,并通过它的方法计算成字母,并在另一个文件中打印字母等级?_Java_Loops_Oop_Multidimensional Array_Object Oriented Database - Fatal编程技术网

Java 如何存储文件数据行,并通过它的方法计算成字母,并在另一个文件中打印字母等级?

Java 如何存储文件数据行,并通过它的方法计算成字母,并在另一个文件中打印字母等级?,java,loops,oop,multidimensional-array,object-oriented-database,Java,Loops,Oop,Multidimensional Array,Object Oriented Database,class.txt Reena Sam,100,90,80,100 唐娜·巴托洛姆,90,90,100,100 Chris Tui,100,90,100,70 我是java新手,我正试图弄明白 如何将文件数据行存储为字母,并在另一个文件中打印字母等级 我正在尝试将数据存储到多个对象或数组列表中 像这样: 莉娜·萨姆:一个 唐娜·巴托洛姆:B 克里斯·图伊:C 下面是我目前在这方面的进展,但我在尝试存储数据时遇到了困难。请帮忙。。。 。。。 班级评分员{ 专用扫描仪读取文件; 私有字符串[

class.txt

  • Reena Sam,100,90,80,100
  • 唐娜·巴托洛姆,90,90,100,100
  • Chris Tui,100,90,100,70
我是java新手,我正试图弄明白 如何将文件数据行存储为字母,并在另一个文件中打印字母等级

我正在尝试将数据存储到多个对象或数组列表中

像这样:

  • 莉娜·萨姆:一个
  • 唐娜·巴托洛姆:B
  • 克里斯·图伊:C
下面是我目前在这方面的进展,但我在尝试存储数据时遇到了困难。请帮忙。。。
。。。
班级评分员{
专用扫描仪读取文件;
私有字符串[]参数;
私有数组列表;
私有字符串finalGrade=“”;
分级器(字符串[]arg){
参数=arg;
}
作废readStudentScores(){
File File=新文件(参数[0]);
如果(!file.exists()){
System.out.println(“输入文件”+参数[0]+”不存在”);
系统出口(2);
}
请尝试{//为文件创建扫描程序
readFile=新扫描仪(文件);
ArrayList=新建ArrayList();
//从文件中读取数据
System.out.println(“从文件读取数据”);
while(readFile.hasNextLine()){
字符串temp=readFile.nextLine();
//list.add(new Student());//存储Student student1=new Student(name 2,20,28,60,)
//存储Student student2=新学生(姓名2、20、28、60)
系统输出打印项次(温度);
//字符串[]studentInfo=line.split(“,”);
}
集合。排序(列表);
对于(int i=list.size();i>=0;i++)
System.out.print(list.get(i)+“”);
System.out.println(list.toString());
//System.out.println();
}捕获(IOE异常){
System.out.println(“读取文件时出错:“+file+e.getMessage()”);
}
}
void computeGrade(){
int Q1=quiz1;
int Q2=quiz2;
int M1=中间值;
int FN=期末考试;
int finalScore=(Q1*.20+Q2*.20+M1*.25+FN*.35);
如果(最终核心>=.9)
finalGrade=“A”;

如果(finalScore>=.8&&finalScore=.7&&finalScore=.6&&finalScore这里有两件事。首先,我看到您有一个系统打印集,用于捕获集合排序中的未知错误。printStackTrace在这里更有用

此外,PrintWriter只返回一个等级。要获得所需的输出,您确实需要返回一个带有串联字符串的构造函数。您可以通过为类创建一个处理需要返回的参数的对象来实现这一点。类似于:

String finalGrade = f.toString();

public gradeMarker(String name, String finalGrade) {
     this.name = name;
     this.finalGrade = finalGrade;
 } 
您的final grade是一个整数(f),但我个人认为以字符串形式读/写数据更容易。您可以使用getter和setter方法进行后续操作,然后使用final方法返回所需的输出

public String toString() {
    return name + "," + finalGrade;
}
然后可以将结果放入列表中,并使用for-each循环将其写入文件

List<gradeMaker> grade = FileReader(//your file)
PrintWriter output = new PrintWriter(//your file)
for (gradeMaker x : grade) {
    output.println(x);
}
List grade=FileReader(//您的文件)
PrintWriter输出=新的PrintWriter(//您的文件)
用于(成绩评定器x:成绩){
输出println(x);
}

这将打印每一行,并且因为它是for each,所以只有在存在要打印的对象时才会打印。希望所有这些都有帮助!

这里有几件事。首先,我看到您有一个系统打印集来捕获集合排序中的未知错误。printStackTrace在那里会更有用

此外,PrintWriter只返回一个等级。要获得所需的输出,您确实需要返回一个带有串联字符串的构造函数。您可以通过为类创建一个处理需要返回的参数的对象来实现这一点。类似于:

String finalGrade = f.toString();

public gradeMarker(String name, String finalGrade) {
     this.name = name;
     this.finalGrade = finalGrade;
 } 
您的final grade是一个整数(f),但我个人认为以字符串形式读/写数据更容易。您可以使用getter和setter方法进行后续操作,然后使用final方法返回所需的输出

public String toString() {
    return name + "," + finalGrade;
}
然后可以将结果放入列表中,并使用for-each循环将其写入文件

List<gradeMaker> grade = FileReader(//your file)
PrintWriter output = new PrintWriter(//your file)
for (gradeMaker x : grade) {
    output.println(x);
}
List grade=FileReader(//您的文件)
PrintWriter输出=新的PrintWriter(//您的文件)
用于(成绩评定器x:成绩){
输出println(x);
}

这将打印每一行,因为它是为每一行打印的,所以只要有对象存在就可以打印。希望所有这些都有帮助!

这里有一个完整的工作示例作为起点。如果您使用Java 7或更高版本,您可以通过使用
Java.nio.file
,而不是
Java.io.F>来改进它,这是一种处理符合当今标准的文件的方法ILE 。您还可以考虑使用java 8代码> Sturvis,将一行映射到一个对象清洁器,并更可读。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MarksToGrades {

    public static void main(String[] args){
        String inputFile = "C:\\Users\\Eritrean\\Desktop\\marks.txt";
        List<Student> students = readFileAndGetStudents(inputFile);
        String outputFile = "C:\\Users\\Eritrean\\Desktop\\grades.txt";
        writeStudentsDataToFile(students,outputFile);
    }

    static List<Student> readFileAndGetStudents(String inputFileName){
        List<Student> students = new ArrayList<>();
        try(FileReader fr = new FileReader(new File(inputFileName));
            BufferedReader reader = new BufferedReader(fr);){

            String line = "";
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
                students.add(new Student(line));
            }
        }
        catch(IOException e){
            e.printStackTrace();
        }        
        return students;
    }
    static void writeStudentsDataToFile(List<Student> students, String outputFileName){
        try (FileWriter writer = new FileWriter(outputFileName);
             BufferedWriter bw = new BufferedWriter(writer)) {
            for(Student stud : students){
                System.out.println(stud.toString());
                bw.write(stud.toString());
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    static class Student{
        String name;
        int quiz1;
        int quiz2;
        int  mid1;;
        int finals;
        double total;
        char grade;
        // getter & setter omitted as they are not important for this task. if necessary, you can add them

        public Student(String line) {
            String[] data = line.split(",");
            this.name   = data[0];
            this.quiz1  = Integer.parseInt(data[1].trim());
            this.quiz2  = Integer.parseInt(data[2].trim());
            this.mid1   = Integer.parseInt(data[3].trim());
            this.finals = Integer.parseInt(data[4].trim());
            this.total = calculateTotal (quiz1,quiz2,mid1,finals);
            this.grade = getGrade(total);
        }

        private double calculateTotal(int quiz1, int quiz2, int mid1, int finals) {
            return quiz1 * .20 + quiz2 * .20 + mid1 * .25 + finals * .35;
        }

        private char getGrade(double total) {
            if (total >= 90) 
                return 'A';
            else if (total >= 80)
                return 'B';
            else if (total >= 70)
                return 'C';
            else if (total >= 60)
                return 'D';
            else 
                return 'F';
        } 

        @Override
        public String toString() {
            return  name + ": " + grade ;
        }        
    }
}
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
公开课成绩{
公共静态void main(字符串[]args){
String inputFile=“C:\\Users\\Eritrean\\Desktop\\marks.txt”;
列出学生=readFileAndGetStudents(inputFile);
String outputFile=“C:\\Users\\Eritrean\\Desktop\\grades.txt”;
WriteStudentsDataofile(学生,输出文件);
}
静态列表readFileAndGetStudents(字符串输入文件名){
List students=new ArrayList();
try(FileReader fr=newfilereader(newfile(inputFileName));
BufferedReader读取器=新的BufferedReader(fr);){
字符串行=”;
而((line=reader.readLine())!=null){
系统输出打印项次(行);
添加(新学生(行));
}
}
捕获(IOE异常){
e、 printStackTrace();
}        
留学生;
}
静态无效WriteStudentsDataofile(列出学生,S