不能的.text文件的第一行用字符串比较

问题描述 投票:0回答:2

我想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
java
2个回答
1
投票

我创建了你给的值的文件:

Michael,70,90,20
John,90,80,60
Molly,60,30,50

当我尝试你的代码,它似乎很好地工作:

makeList("Michael");
makeList("John");
makeList("Molly");

返回

60
77
47

我的猜测是,你有你的文件一开始就某种无形的性格,这是什么使你平等失败。解析XML时和解析器会抱怨我的文件不符合XML标签开始我遇到这样问题的几个时间。

你可以尝试让一个全新的文件,这3条线,并再次尝试这个新的文件,你的程序?


0
投票

这里是一个更简单,更清晰的方式做到这一点:

 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);
    }                          
 }
© www.soinside.com 2019 - 2024. All rights reserved.