0

我正在学习 Java 初学者课程,他们要求我们:

  • 编写一个程序,根据用户输入的分数列表计算 A、B、C、D 和 F 的数量。

  • 输入所有分数后,程序必须显示一个水平条形图,其中显示每个等级的数字,如“操作”部分所示。

  • 计数图必须为每个计数的单位显示一个“*”。

  • 当用户输入 -1 时,程序必须显示最终图形并退出。

  • 程序的输出必须显示提示和计数图,如上面的操作部分所示。

  • 您可以假设用户只会输入数字。

手术:

程序启动并提示您输入测试分数或通过输入 -1 结束程序。如下所示:

Number of A's: 0
Number of B's: 0
Number of C's: 0
Number of D's: 0
Number of F's: 0
Enter a score (%) or -1 to end: 90

当您输入每个分数时,应用程序会决定分数是 A、B、C、D 还是 F,并在字母等级计数中加一。如下所示:

Number of A's: 1
Number of B's: 0
Number of C's: 0
Number of D's: 0
Number of F's: 0
Enter a score (%) or -1 to end: 95

每次输入分数时,程序都会更新计数。如下所示:

Number of A's: 2
Number of B's: 0
Number of C's: 0
Number of D's: 0
Number of F's: 0
Enter a score (%) or -1 to end: -1

输入完分数后,程序会显示一个水平条形图,其中包含 A、B、C、D 和 F 的总分。如下所示:

A's: **
B's:
C's:
D's:
F's:

规格:

数字等级 字母等级

大于或等于 90 A

小于 90 但大于或等于 80 B

小于 80 但大于或等于 70 C

小于 70 但大于或等于 60 D

低于 60 华氏度

程序结束时,显示分数、平均分数和最佳分数。

例子:

得分数:2

平均分:92.5

最好成绩:95.0

我们还被指示以至少两种方法进行编码:一种具有 void 和一种返回某些内容。

到目前为止,我只能计算输入的分数,但我似乎无法专注于记录所有输入计算平均值挑选出最好的分数

这是我到目前为止所拥有的:

    import java.util.*;


    public class ScoreTally {
        public static void main(String[] args) {
             Scanner input = new Scanner(System.in);


            int aCount = 0;
            int bCount = 0;
            int cCount = 0;
            int dCount = 0;
            int fCount = 0;
            int scoreCount = -1;

            double score = 0;



            while (score != -1) {
                if (score >= 90)
                    aCount++;

                else if ((score < 90) && (score >= 80))
                    bCount++;

                 else if ((score < 80) && (score >= 70))
                    cCount++;

                else if ((score < 70) && (score >= 60))
                    dCount++;

                else if ((score < 60) && (score > 0))
                    fCount++;

                System.out.println("Number of A's: " + aCount);
                System.out.println("Number of B's: " + bCount);
                System.out.println("Number of C's: " + cCount);
                System.out.println("Number of D's: " + dCount);
                System.out.println("Number of F's: " + fCount);
                System.out.print("Enter a score (%) or -1 to end: ");
                score = input.nextDouble();

                scoreCount++;

            }

            if (score == -1)
                System.out.println("Number of scores: " + scoreCount);

        }
    }
4

3 回答 3

0

首先,您已经有了计算结果的代码。

        int aCount = 0;
        int bCount = 0;
        int cCount = 0;
        int dCount = 0;
        int fCount = 0;
        int scoreCount = -1;

您需要的是另一个包含总分的字段,即

int totalScore = 0;

在进入 while 循环之前,您需要提示输入第一个分数,否则第一次迭代将无法正常运行。在最后(或开始),您需要totalScore使用该轮的输入进行更新,如果输入为 -1,则不要更新它。

平均分数将是totalScore/scoreCount您在完成 while 循环后应该计算的分数。

为了获得最好的分数,你可以有另一个领域int = maxScore

您可以在循环的每次迭代中更新它

maxScore = Math.max(maxScore, score);

Math.max 返回两个数字中的最大值。

于 2013-04-11T05:41:05.360 回答
0

这很简单。声明 2 个变量,一个用于具有 avgScore,一个用于程序开始。

double bestScore = 0.0;
double avgScore = 0.0;
double totalScore = 0.0;
while (score != -1) {
                totalScore = totalScore + score;
                if(score > bestScore)
                    bestScore = score;  
                if (score >= 90)
                    aCount++;

                else if ((score < 90) && (score >= 80))
                    bCount++;

                 else if ((score < 80) && (score >= 70))
                    cCount++;

                else if ((score < 70) && (score >= 60))
                    dCount++;

                else if ((score < 60) && (score > 0))
                    fCount++;

                System.out.println("Number of A's: " + aCount);
                System.out.println("Number of B's: " + bCount);
                System.out.println("Number of C's: " + cCount);
                System.out.println("Number of D's: " + dCount);
                System.out.println("Number of F's: " + fCount);
                System.out.print("Enter a score (%) or -1 to end: ");
                score = input.nextDouble();

                scoreCount++;

            }

            if (score == -1){
                System.out.println("Number of scores: " + scoreCount);
                avgScore = totalScore/scoreCount;
                System.out.println("Best Score: " + bestScore);
                System.out.println("Avg Score: " + avgScore);
            }

此外,为了显示图表,您可以使用您的最终统计。

于 2013-04-11T05:42:09.113 回答
0

使用函数返回最大的数字以获得最好的分数。还有另一个打印最终图表的功能。那应该照顾两个功能要求。此外,使循环成为退出控制的循环,因为它必须至少运行一次。

作为一种编码实践,您不应该使用星号导入(import java.util.*),而是只使用您需要的东西。

此外,在开始时将 scoreCount 设置为 -1 方面做得很好。

import java.util.Scanner;

public class ScoreTally {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);


    int aCount = 0;
    int bCount = 0;
    int cCount = 0;
    int dCount = 0;
    int fCount = 0;
    int scoreCount = -1;

    double score;
    double totalScore = 0;
    double bestScore = -1;


    do {
        System.out.println("Number of A's: " + aCount);
        System.out.println("Number of B's: " + bCount);
        System.out.println("Number of C's: " + cCount);
        System.out.println("Number of D's: " + dCount);
        System.out.println("Number of F's: " + fCount);
        System.out.print("Enter a score (%) or -1 to end: ");
        score = input.nextDouble();
        if (score >= 90) {
            aCount++;
        } else if ((score < 90) && (score >= 80)) {
            bCount++;
        } else if ((score < 80) && (score >= 70)) {
            cCount++;
        } else if ((score < 70) && (score >= 60)) {
            dCount++;
        } else if ((score < 60) && (score > 0)) {
            fCount++;
        }
        scoreCount++;
        totalScore = totalScore + score;
        bestScore = greaterNumber(bestScore, score);


    } while (score != -1);

    printGraph('A', aCount);
    printGraph('B', bCount);
    printGraph('C', cCount);
    printGraph('D', dCount);
    printGraph('F', fCount);
    System.out.println("Number of scores: " + scoreCount);
    System.out.println("Average scores: " + totalScore / scoreCount);
    System.out.println("Best scores: " + bestScore);

}

public static void printGraph(char grade, int count) {
    System.out.print("Number of " + grade + "'s: ");
    for (int i = 0; i < count; i++) {
        System.out.print("*");
    }
    System.out.println();
}

public static double greaterNumber(double firstNum, double secondNum) {
    if (firstNum >= secondNum) {
        return firstNum;
    } else {
        return secondNum;
    }
}

}

于 2013-04-11T05:56:48.293 回答