【问题标题】:Java - How can I display a letter grade for each of my grades in my program rather than just my last one?Java - 如何为我的程序中的每个成绩显示一个字母成绩,而不仅仅是我的最后一个成绩?
【发布时间】:2020-02-20 05:40:46
【问题描述】:

在我的大学作业中,我必须提示一个分数并让用户输入 6 次,然后在每个分数旁边显示一个字母分数,然后显示平均值。我终于能够正确显示每个标记,但最后一个条目的字母等级显示为每个条目。我需要在我的代码中进行哪些更改才能使其正常工作?

我有一个返回字母等级的方法,但该方法仅部分有效;喜欢它显示适当的字母等级,但仅适用于最后一个条目。

package com.company;

import java.util.Scanner; //Summons the Scanner class

public class Main { //Main class

    //Instance variables to count and calculate the grades
    public static double total;
    public static int grade;
    public static int entries = 0;

    public static void main(String[] args) { //Main method

        //Creates a scanner for user input
        Scanner keyboard = new Scanner(System.in);
        int[]grades = new int[7];

        while (entries < 6) { //Make the user enter 6 grades
            do {
                System.out.printf("Enter grade %d: ", entries); //Prompt for a grade
                grades[entries] = grade;
                entries++;
                grade = keyboard.nextInt(); //Get the user input
                total = total + grade; //Add grade to total
            } while (!wrongValue(grade)); //Call a method to prompt for a re-entry upon user error
        }
        grades[6]=grade;
        double average = total / 6; //Get the total
        System.out.printf("1st grade is %d which is %s%n%%", grades[1], letterGrade(grade));
        System.out.printf("2nd grade is %d which is %s%n%%", grades[2], letterGrade(grade));
        System.out.printf("3rd grade is %d which is %s%n%%", grades[3], letterGrade(grade));
        System.out.printf("4th grade is %d which is %s%n%%", grades[4], letterGrade(grade));
        System.out.printf("5th grade is %d which is %s%n%%", grades[5], letterGrade(grade));
        System.out.printf("6th grade is %d which is %s%n%%", grades[6], letterGrade(grade));
        System.out.printf("total average = %.1f%%", average);
    }

    public static String letterGrade (int grade)
    {
        if (grade >= 90 && grade <= 100)
            return "an A+";
        else if (grade >= 80 && grade <= 90)
            return "an A";
        else if (grade >= 75 && grade <= 80)
            return "a B+";
        else if (grade >= 70 && grade <= 75)
            return "a B";
        else if (grade >= 65 && grade <= 70)
            return "a C+";
        else if (grade >= 60 && grade <= 65)
            return "a C";
        else if (grade >= 55 && grade <= 60)
            return "a D+";
        else if (grade >= 50 && grade <= 55)
            return "a D";
        else
            return "an F";
    }
}

【问题讨论】:

  • 能否请您也添加 wrongValue(grade) 的代码?

标签: java arrays


【解决方案1】:

我怀疑你想调用letterGrade 与你从用户那里读取的每个grade。但首先,数组从0(不是1)开始。您的格式 String(s) 有奇怪的 %% 文字,它将在下一行重新开始,我稍微清理了代码(我不喜欢无用的临时变量,也不我喜欢无法澄清代码的 cmets)。喜欢,

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    int[] grades = new int[6];
    int total = 0;
    for (int i = 0; i < grades.length; i++) {
        do {
            System.out.printf("Enter grade %d: ", i + 1);
            grades[i] = keyboard.nextInt();
        } while (!wrongValue(grades[i])); 
        total += grades[i];
    }
    double average = total / 6.0;
    System.out.printf("1st grade is %d which is %s%n", grades[0], letterGrade(grades[0]));
    System.out.printf("2nd grade is %d which is %s%n", grades[1], letterGrade(grades[1]));
    System.out.printf("3rd grade is %d which is %s%n", grades[2], letterGrade(grades[2]));
    System.out.printf("4th grade is %d which is %s%n", grades[3], letterGrade(grades[3]));
    System.out.printf("5th grade is %d which is %s%n", grades[4], letterGrade(grades[4]));
    System.out.printf("6th grade is %d which is %s%n", grades[5], letterGrade(grades[5]));
    System.out.printf("total average = %.1f which is %s%n", average, 
            letterGrade((int) average));
}

最后,根据您发布的逻辑,我假设wrongValue 在值有效时实际上返回true(因此方法名称似乎是向后的)。

【讨论】:

  • 天哪;太感谢了!事实证明,我唯一需要做的就是用该方法调用和每行的数组替换我的 6 个输出中的等级,并使输出看起来更好。希望这对其他人也有帮助!我可能应该将我的整个代码粘贴在这里,但该网站建议不要这样做。但是您的主要更改仍然有帮助,再次感谢!
  • @KevinMeisenbacher - 如果这回答了你的问题,那么请投票并接受这个答案,这样每个人都知道它已经得到了回答。
  • 已经做到了,但不幸的是,我需要更多的声誉才能展示出来。
猜你喜欢
  • 2021-04-19
  • 2021-05-09
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多