【问题标题】:How to load parts of a file using jFrame into an ArrayList in Java?java - 如何使用jFrame将文件的一部分加载到Java中的ArrayList中?
【发布时间】:2015-01-28 23:42:40
【问题描述】:

我正在为一项作业编写一个程序,该程序使用 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;

我知道 Grades.add(LetterGrade.grade) 行中存在问题,因为我只能将 LetterGrade 枚举(A、AMinus、BPlus、B 等)添加到 ArrayList “grades”,而grade 是一个字符串。我怎样才能使它在 Scanner 读取文件时,获取每个等级并将其添加到称为“等级”的 ArrayList 中?另外,我只想获取属于我的 LetterGrade 枚举一部分的成绩,所以我会使用 if/else 来过滤它吗?感谢您的帮助,我会尽快回复问题。

【问题讨论】:

  • 您没有显示变量 LetterGrade.grade 的类型,并且您从未告诉我们您遇到的具体问题
  • @VinceEmigh LetterGrade.grade 可能是 OP 试图索引到 LetterGrade 的尝试,底部有一个问题。
  • @APerson 没关系,我刚刚看到他提到它是一个字符串。如果他的问题格式更好,并且不包含无关信息,我会更清楚地看到它

标签: java swing arraylist


【解决方案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(如果成绩无效),然后在将成绩添加到grades 时检查null

【讨论】:

  • 其实已经有一种方法可以将字符串转换为Enum。这是LetterGrade.valueOf(String)
  • 是的,但是如果文件中的字母等级不完全等于枚举值怎么办? valueOf() 对空格和其他问题非常讲究。
  • 如果是空格问题,您可以在使用valueOf 之前trim 字符串。如果字符串明显不同,我同意您可能必须手动解析它。
【解决方案2】:

将 LetterGrade.grade 更改为

LetterGrade.valueOf(grade);

LetterGrade.grade 将用于访问 LetterGrade 范围内名为 Grade 的变量。

您需要将字符串转换为枚举。

查看Lookup enum by string value了解更多详情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2013-04-13
    相关资源
    最近更新 更多