我想studentGrade阵列发送到“计算”的方法来计算成绩的平均水平,但如果文本文件的第一行是参数,我不能。当“如果”的方法运行,它可以追溯到while循环,即使两个字符串相等。
我试图改变的.text的第一线,在案件存在问题。但结果是一样的。它从来不比较,如果想要的人是在第一线。
static int studentNumber = 0;
static String[] studentGrade;
static String studentName = "";
static void makeList(String name) {
try(Scanner sc = new Scanner(new BufferedReader(new FileReader("C:\\Users\\User\\Desktop\\new_1.txt")))) {
boolean flag = true;
while (sc.hasNextLine()) {
flag = true;
String studentLine = sc.nextLine();
studentGrade = studentLine.split(",");
studentName = studentGrade[0];
if (studentName.equalsIgnoreCase(name)){
calculate(studentGrade);
flag = false;
break;
}
}
if (flag)
System.out.println("Couldn't found!");
}
catch (FileNotFoundException e) {
System.out.println("An error occured when the file was tried to opened.");
}
}
static void calculate(String[] a) {
int note1 = Integer.parseInt(a[1]);
int note2 = Integer.parseInt(a[2]);
int note3 = Integer.parseInt(a[3]);
double avg = Math.ceil((double)(note1 + note2 + note3) / 3);
System.out.println(a[0] + "'s average is: " + (int)avg);
}
我预计,如果情况是真实的,并派出数组“计算”的方法。它的工作,除了学生在.txt文件的第一行。例如,如果用户输入是迈克尔,它说“无法找到!”但如果输入是约翰,它给它的平均水平。
//First lines of .txt file
Michael,70,90,20
John,90,80,60
Molly,60,30,50
我创建了你给的值的文件:
Michael,70,90,20
John,90,80,60
Molly,60,30,50
当我尝试你的代码,它似乎很好地工作:
makeList("Michael");
makeList("John");
makeList("Molly");
返回
60
77
47
我的猜测是,你有你的文件一开始就某种无形的性格,这是什么使你平等失败。解析XML时和解析器会抱怨我的文件不符合XML标签开始我遇到这样问题的几个时间。
你可以尝试让一个全新的文件,这3条线,并再次尝试这个新的文件,你的程序?
这里是一个更简单,更清晰的方式做到这一点:
try (Stream<String> lines = Files.lines("C:\\Users\\User\\Desktop\\new_1.txt")) {
Optional<String[]> studentGradesOpt =
lines.map(line -> line.split(","))
.filter(row -> row[0].equalsIgnoreCase(name))
.findFirst();
studentGradesOpt.ifPresent(grades -> calculate(grades));
if (!studentGradesOpt.isPresent()) {
System.out.println("Couldn't find student " + name);
}
}