我正在学习Java初学者课程,他们要求我们:
编写一个程序,根据用户输入的分数列表计算A,B,C,D和F的数量。
输入所有分数后,程序必须显示a 每个等级编号的水平条形图,如“操作”部分所示。
计数图表必须为每个计算单位显示一个“*”。
当用户输入-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℃
小于70但大于或等于60D
小于60华氏度
当程序结束时,显示分数,平均分数和最佳分数。
示例:
得分数:2
平均得分:92.5
最佳得分:95.0
我们还被指示使用至少两种方法进行编码:一种具有空白,另一种返回某种方法。
到目前为止,我只能计算输入的分数,但我似乎无法绕着记录所有输入和计算平均值< / em>和选出最佳分数
这是我到目前为止所做的:
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);
}
}
答案 0 :(得分: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,则不更新它。
平均分数只是你完成while循环后应计算的totalScore/scoreCount
。
要获得最高分,您可以为int = maxScore
您可以使用
在循环的每次迭代中更新它 maxScore = Math.max(maxScore, score);
Math.max返回两个数字的最大值。
答案 1 :(得分: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);
}
同样,为了显示图表,您可以使用最终的标签。
答案 2 :(得分:0)
使用函数返回最大数字以获得最佳分数。 另一个打印最终图形的功能。 这应该照顾两个功能要求。 此外,将循环设置为出口控制循环,因为它必须至少运行一次。
作为编码实践,您不应该使用星型导入(导入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;
}
}
}