繁体   English   中英

无法将.txt文件的第一行与字符串进行比较

[英]Can't compare the first line of .txt file with a string

我想发送studentGrade数组以“计算”方法来计算平均成绩,但是如果文本文件的第一行是参数,则不能。 当“ if”方法运行时,即使两个字符串相等,它也会返回while循环。

如果出现问题,我尝试更改.txt的第一行。 但是结果是一样的。 如果想要的人在第一行,则从不进行比较。

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);
}

我希望if大小写正确,并将数组发送到“ calculate”方法。 除了学生位于.txt文件的第一行之外,它会执行其工作。 例如,如果用户输入是Michael,则显示“找不到!”。 但是如果输入是John,则给出其平均值。

//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);
    }                          
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM