我正在编写一个程序,该程序使用jFrame UI来读取记录文件的内容,其中包含“成绩”(A,B,C,C +等),然后计算成绩总数,以及最高和最低等级。在jFrame中,用户输入文件名(我不想使用JFileChooser,因为这不是赋值的一部分)并单击“加载”以加载文件。我正在努力使用Load()方法。到目前为止,我有:
public ArrayList<LetterGrade> Load(File file) throws FileNotFoundException {
ArrayList<LetterGrade> grades = new ArrayList();
try{
Scanner input = new Scanner(file);
String grade = input.nextLine();
grades.add(LetterGrade.grade);
} catch (FileNotFoundException ex) {
System.out.printf("ERROR: %s", ex);
}
return grades;
我知道该行中存在一个问题,即grade.add(LetterGrade.grade),因为我只能将一个LetterGrade枚举(A,AMinus,BPlus,B等)添加到ArrayList“等级”,而等级是一个字符串。我怎样才能使Scanner读取文件时,每个等级并将其添加到名为“grade”的ArrayList中?另外,我只想获得属于我的LetterGrade枚举的成绩,所以我会使用if / else来过滤那个吗?感谢您的帮助,我会尽快回答问题。
答案 0 :(得分:1)
Java无法将值LetterGrade
的字符串直接自动转换为LetterGrade
。你可以自己编写这个功能。尝试做这样的事情:
LetterGrade parseGrade(String grade) {
if(grade.equals("A") return LetterGrade.A;
// and so on
}
然后,而不是
grades.add(LetterGrade.grade);
在Load()
中,你会得到这个:
grades.add(parseGrade(grade));
如果您想先检查您添加的内容是否为有效成绩,如果parseGrade()
成为无效成绩,请null
返回null
,然后检查{{1将成绩添加到grades
。
答案 1 :(得分:1)
将LetterGrade.grade更改为
LetterGrade.valueOf(grade);
LetterGrade.grade将用于访问LetterGrade范围内名为grade的变量。
您需要将String转换为Enum。
有关更多详情,请参阅Lookup enum by string value