【问题标题】:Help with Java Arrays: Saving to output fileJava 数组帮助:保存到输出文件
【发布时间】:2011-07-12 23:52:39
【问题描述】:
public char[] calculateGrade(int [] scores, char [] grades){
    for (int r = 0; r < scores.length; r++){
        //System.out.println(scores[r] + " ");
        if (scores[r] > 90)
            grades[r] = 'A';
        else if (scores[r] > 80)
            grades[r] = 'B';
        else if (scores[r] > 70)
            grades[r] = 'C';
        else if (scores[r] > 60)
            grades[r] = 'D';
        else
            grades[r] = 'F';
    for (int i = 0; i < grades.length; i++)
        System.out.println(grades[i]);

    }
    return grades;

}

以上是我整个程序的一小部分,它从文件中获取分数并将它们转换为字母等级。我需要将这些字母等级放入该文件中。字母等级需要与分数相对应。一行中有 26 个不同的分数。我会把我的整个代码放在这里,但它真的很长。请大家帮忙!

【问题讨论】:

  • 最后一个 for 循环只会多次打印所有成绩。我真的很困惑......
  • 顺便说一句,我意识到没有人提到你的代码的问题。您的循环是嵌套的。因此,每次阅读乐谱时,都会打印所有成绩。小心括号。

标签: java arrays file


【解决方案1】:

我建议让每种方法都做一件事并做好。不要计算成绩并打印出来。

public void printGrades(PrintStream ps, char [] grades) {
    for (char grade : grades) {
       ps.println(grade);
    }
}

public char[] calculateGrade(int [] scores){

    char [] grades = new char[scores.length];

    for (int r = 0; r < scores.length; r++){
        if (scores[r] > 90)
            grades[r] = 'A';
        else if (scores[r] > 80)
            grades[r] = 'B';
        else if (scores[r] > 70)
            grades[r] = 'C';
        else if (scores[r] > 60)
            grades[r] = 'D';
        else
            grades[r] = 'F';
    }
    return grades;

}

【讨论】:

  • 我想,他只从文件中读取分数。所以,“char [] Grades”作为calculateGrade()的参数也是错误的做法。
  • 我不明白,您显然是在方法中创建成绩数组并将其返回给班级,但是班级如何理解它。不是局部变量吗?
  • 在意识到剪切和粘贴解决方案不是首选之后,我从参数列表中删除了“char [] 等级”。
  • 那么我将如何将它们分配给文件,而不是打印成绩?假设有 20 行某人的姓名和他们的分数,我需要在分数后面加上字母等级。我该怎么做呢?对不起,noobness...
  • 您不会将它们“分配”到文件中。打开文件后写入文件。修改我给你的方法,包括一个名字、分数和等级的数组。或者,更好的是 List 或其他将姓名、分数和等级封装成一个统一事物的类。 Java 是一种面向对象的语言。
【解决方案2】:

将您的方法更改为以下内容:

public void calculateGrade(int[] scores, char[] grades){
    for (int r = 0; r < scores.length; r++) {
        if (scores[r] > 90)
            grades[r] = 'A';
        else if (scores[r] > 80)
            grades[r] = 'B';
        else if (scores[r] > 70)
            grades[r] = 'C';
        else if (scores[r] > 60)
            grades[r] = 'D';
        else
            grades[r] = 'F';
    }
}

没有必要返回grades,因为无论如何数组都是通过引用传递的。然后在你的调用方法(main?)中,你应该将grades写到你想要的文件中。

要写入文件,请咨询:http://www.exampledepot.com/egs/java.io/WriteToFile.html

比如:

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("filename")));

    for( char grade : grades )
        out.println(grade);

    out.close();
} catch (IOException e) { }

【讨论】:

  • 谢谢,但最后一部分有点太复杂了,哈哈。我是一名初级 CS 学生,到目前为止我还没有了解这些关键字。所以我需要保持简单哈哈。但我明白第一部分!
  • 这就是您写入文件的方式。不要担心trycatch。只需将out.println 视为类似于System.out.println,除了写入文件。
猜你喜欢
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多