我想发送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
答案 0 :(得分: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行制作一个全新的文件,然后在这个新文件上再次尝试您的程序吗?
答案 1 :(得分:0)
这是一种更简单明了的方法:
var obj = {
01: "Jan",
02: "Feb",
03: "Mar",
04: "Apr",
05: "May",
06: "Jun",
07: "Jul",
08: "Aug",
09: "Sep",
10: "Oct",
11: "Nov",
12: "Dec"
}
var key = Object.keys(obj)[Object.values(obj).indexOf("Jun")]
console.log(key)