【发布时间】:2019-02-05 14:03:09
【问题描述】:
我想将 studentGrade 数组发送到“calculate”方法来计算平均成绩,但如果文本文件的第一行是参数,我不能。当 "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 情况为真,并将数组发送到“计算”方法。除了学生在 .txt 文件的第一行之外,它完成了它的工作。例如,如果用户输入的是 Michael,它会显示“找不到!”但如果输入是 John,它会给出平均值。
//First lines of .txt file
Michael,70,90,20
John,90,80,60
Molly,60,30,50
【问题讨论】:
-
为什么你在找到名字的时候把flag标记为false?
-
如果您只是阅读行文,为什么还要使用
Scanner?只需阅读BufferedReader中的行。 -
当我尝试您的代码时,它返回正确的平均值:60、77 和 47
-
看来您显示的代码应该可以工作。请提供 MCVE(阅读帮助部分以了解它是什么)和产生错误输出的输入。
-
我使用了断点并检查了程序的步骤。在 if 语句中,任一部分的值都是相同的字符串。但它没有进入 if 语句,它只是返回到 while 循环。
标签: java