Java 如何存储文件数据行,并通过它的方法计算成字母,并在另一个文件中打印字母等级?
class.txtJava 如何存储文件数据行,并通过它的方法计算成字母,并在另一个文件中打印字母等级?,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 下面是我目前在这方面的进展,但我在尝试存储数据时遇到了困难。请帮忙。。。 。。。 班级评分员{ 专用扫描仪读取文件; 私有字符串[
- Reena Sam,100,90,80,100
- 唐娜·巴托洛姆,90,90,100,100
- Chris Tui,100,90,100,70
- 莉娜·萨姆:一个
- 唐娜·巴托洛姆: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