例如:如果程序的输入是:
学生信息.tsv StudentInfo.tsv 的内容是:
巴雷特·伊丹 70 45 59 布拉德肖·里根 96 97 88 查尔顿·凯厄斯 73 94 80 梅奥·泰瑞斯 88 61 36 斯特恩布伦达 90 86 45 文件report.txt应包含:
巴雷特·伊丹 70 45 59 F 布拉德肖·里根 96 97 88 A 查尔顿·凯厄斯 73 94 80 B 梅奥·泰瑞斯 88 61 36 D 斯特恩布伦达 90 86 45 C
平均分:期中1 83.40,期中2 76.60,期末61.60 (忽略所有其余的代码,我只是想了解为什么我无法读取该文件)
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
public class LabProgram {
public static void main(String[] args) throws IOException {
Scanner scnr = new Scanner(System.in);
BufferedReader reader;
/* TODO: Declare any necessary variables here. */
String input = scnr.nextLine();
System.out.print(input);
try {
Scanner scanner = new Scanner(new File(input));
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
/* TODO: Read a file name from the user and read the tsv file here. */
/* TODO: Compute student grades and exam averages, then output results to a text file here. */
/* average = (midterm1 +midterm2 +finalg)/3
if (average >= 90){
grade == "A"};
else if ((80 <= average) && (average < 90)){
grade == "B"};
else if ((70 <= average) && (average < 80)){
grade == "c"};
else if ((60 <= average) && (average < 70)){
student_grade == "D"};
else (average < 60){
grade == "F"}; */
}
}
每当我运行该程序时,它都没有输出。 我尝试了几种不同的文件读取方法,但并不完全理解它们。 如果输入是 StudentInfo.tsv 不应该保存在
String input = scnr.nextLine();
? 然后我就可以传递输入了?
这是一个例子。
Scanner scnr = new Scanner(System.in);
/* TODO: Declare any necessary variables here. */
class Entry {
String last, first;
int midterm1, midterm2, finalg;
String grade() {
int x = (int) Math.floor(average());
if (x >= 97 && x <= 100) return "A+";
else if (x >= 93 && x <= 96) return "A";
else if (x >= 90 && x <= 92) return "A−";
else if (x >= 87 && x <= 89) return "B+";
else if (x >= 83 && x <= 86) return "B";
else if (x >= 80 && x <= 82) return "B−";
else if (x >= 77 && x <= 79) return "C+";
else if (x >= 73 && x <= 76) return "C";
else if (x >= 70 && x <= 72) return "C−";
else if (x >= 67 && x <= 69) return "D+";
else if (x >= 63 && x <= 66) return "D";
else if (x >= 60 && x <= 62) return "D−";
else return "F";
}
double average() {
return (midterm1 +midterm2 +finalg)/3.;
}
static Entry parse(String s) {
Entry e = new Entry();
String[] a = s.split("\t", -1);
e.last = a[0];
e.first = a[1];
e.midterm1 = Integer.parseInt(a[2]);
e.midterm2 = Integer.parseInt(a[3]);
e.finalg = Integer.parseInt(a[4]);
return e;
}
@Override
public String toString() {
return
"%s\t%s\t".formatted(last, first)
+ "%s\t%s\t%s\t".formatted(midterm1, midterm2, finalg)
+ grade();
}
}
List<Entry> l = new ArrayList<>();
/* TODO: Read a file name from the user and read the tsv file here. */
try (BufferedReader r = new BufferedReader(new FileReader(scnr.nextLine()))) {
r.lines().forEach(x -> l.add(Entry.parse(x)));
}
/* TODO: Compute student grades and exam averages, then output results to a text file here. */
try (PrintWriter w = new PrintWriter(new FileWriter("report.txt"))) {
l.forEach(w::println);
}
而且,这是 report.txt。
Barrett Edan 70 45 59 F
Bradshaw Reagan 96 97 88 A
Charlton Caius 73 94 80 B−
Mayo Tyrese 88 61 36 D−
Stern Brenda 90 86 45 C