【问题标题】:I have one error with java arrays(store the letter grade in an array)java数组有一个错误(将字母等级存储在数组中)
【发布时间】:2011-07-12 22:50:36
【问题描述】:
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 = 'A';
        else if (scores[r] > 80)
            grades = 'B';
        else if (scores[r] > 70)
            grades = 'C';
        else if (scores[r] > 60)
            grades = 'D';
        else
            grades = 'F';

        return grades;
    }
}

以上是我的一种方法。它读取文件的一部分 (scores[]) 并确定它们的字母等级。我需要知道如何将字母等级存储在我已经创建的名为 Grades[] 的数组中。

【问题讨论】:

  • 为什么不考虑使用 switch 语句呢? download.oracle.com/javase/tutorial/java/nutsandbolts/…
  • 嗨乔希,还要注意你的回报是在 for 循环中,这对于你想要的东西是错误的。我会按照下面的建议使用 Grades[r] = 'A' 等,但将 return 放在 for 循环之外
  • 非常感谢大家。 Joel,我的实际程序比这个大得多,其中有一个调用 this 的 switch 语句。

标签: java arrays methods


【解决方案1】:

成绩[r] = 'A'; (其他类似)

假设成绩与分数长度相同

【讨论】:

  • 我是否返回成绩[]?或成绩?要不然是啥?顺便谢谢你,我可以发誓我试过 sub r。
  • 只返回成绩它是一个对象(实际上是一个字符数组)。还将返回类型更改为 char[] (您正在返回整个成绩数组,对吗?),或者像 Tamas 所做的那样,不返回任何内容,并将结果保留在成绩和访问成绩中(可能因为您正在传递它)
  • 谢谢。在方法签名中,我的返回值应该是什么?等级[]?
  • 要么是 void(参见 Tamas 的回答),并且只访问你将其传递给 calculateGrade 的成绩,或者如果你希望返回你称之为成绩的 char 数组,则可以使用 char[]
  • 没问题 josh,我也希望你看到关于将 return 语句移出循环的评论(除非你完全删除它)
【解决方案2】:

这看起来有点像家庭作业,所以看看你如何访问scores 数组,以及你如何访问grades 数组。你看出区别了吗?

【讨论】:

    【解决方案3】:

    试试这个:

    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';
        }
    }
    

    【讨论】:

      【解决方案4】:
      grades = 'A';
      

      A 属于 char 类型,而标识符 grades 属于 char[] 类型。您要做的是使用[] 运算符在数组中累积成绩。此外,您应该在完成 for 循环而不是在第一次迭代时返回 grades。确保数组grades的长度等于scores

      【讨论】:

        【解决方案5】:
        public char calculateGrade(int[] scores)
        {
            char grade = 'F';
            for(int score : scores)
            {
                if(score >= 90) grade = 'A';
                else if(score >= 80) grade = 'B';
                else if(score >= 70) grade = 'C';
                else if(score >= 60) grade = 'D';
                else grade = 'F';
            }
            return grade;
        }
        

        【讨论】:

        • 是的,但是......“我需要知道如何将字母等级存储在我已经创建的名为 Grades[] 的数组中。”
        【解决方案6】:

        在可能的情况下避免函数中的副作用,将其视为一种替代方法:

        // Given a score, return the appropriate Grade for it.
        public char calculateGrade(int score){
           // See function contract.
        }
        
        // Later...
        int scores[] = {10,70,50,90};
        int grades[] = new char[scores.length]; // but really, use an ArrayList or simialr...
        for (var i = 0; i < scores.length; i++) {
           // We used this form of "for" to keep an index
           grades[i] = calculateGrade(scores[i]);
        }
        
        // And perhaps there might be a function like this as well:
        
        // Given a set of scores, get the associated grades.
        public char[] calculateGrades(int[] scores) {
           // See above.
           // Note how this avoids mutating an input parameter.
           // Keeping functions "more refined" also generally helps.
        }
        

        编码愉快。

        【讨论】:

          【解决方案7】:

          我所看到的所有内容都没有考虑到您似乎试图通过引用传递的事实,而这在 java 中是无法完成的。您要么需要更改方法的返回类型(目前它需要一个字符),要么让该方法只访问一个全局变量,而不是传递一个变量。它看起来确实像家庭作业,所以我不会再继续下去了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-11-11
            • 1970-01-01
            • 2017-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-28
            相关资源
            最近更新 更多