两个问题。我听说当你有超过3个'if'语句时最好使用switch语句。是这样的吗?
其次,有人可以查看下面的代码并给我一个关于A的想法。如何转换成switch语句,尽管是多表达式或B.解释为什么变量'grade'总是导致F。
while (!"Y".equalsIgnoreCase(exit))
{
i++;
System.out.print("Please enter name of assignment " + i + ": ");
assignment = user.nextLine().toUpperCase(); //consumes string + \n
System.out.print("Please enter points earned: ");
earned = user.nextDouble();//consumes double
user.nextLine();//consumes \n
System.out.print("Please enter total points possible: ");
total = user.nextDouble();
user.nextLine();
System.out.print("Assignment\t"); System.out.print("Score\t"); System.out.print("Total Points\t"); System.out.print("Percentage\t\n");
System.out.print(assignment + "\t\t"); System.out.print(earned + "\t"); System.out.print(total + "\t\t"); System.out.print(percent.format(earned / total) + "\n\t");
// Putting user data into an array for calculation:
double[] calc; calc = new double[4];
calc[i] = earned; // Array elements coincide with the current iteration loop
double[] totalPoints; totalPoints = new double[4];
totalPoints[i] = total;
for ( double e : calc) // adds up all the stored data in the array
sum += e;
for ( double f : totalPoints) // adds up all the stored data in the array
tot += f;
char grade = '0';
if (sum / tot >= 90)
{
grade = 'A';
}
else if (sum / tot >= 80 && sum / tot <= 89.99)
{
grade = 'B';
}
else if (sum / tot >= 70 && sum / tot <= 79.99)
{
grade = 'C';
}
else if (sum / tot >= 60 && sum / tot <= 69.99)
{
grade = 'D';
}
else if (sum / tot <= 59.99)
{
grade = 'F';
}
System.out.println("Your total is " + sum + " out of " + tot + ", or " + percent.format(sum / tot) + ", and your grade is an " + grade );
}
答案 0 :(得分:0)
在这种情况下,我认为开关案例不会很好用,但是像上面说的keppil一样,你应该用一个具有不同阈值的浮点数来评估if语句,即
private float total = sum/tot * 100;
if(total >= 90){
//etc...
因为现在正好表示sum / tot评估为小数
答案 1 :(得分:0)
当需要检查一系列值时,if语句是否合适 如果要检查特定值,则switch语句是合适的。
在你的代码中,if语句就好了。虽然您可以通过编写如下内容来改进它:
public class Grade
{
public Grade()
{
float score = 95;
float total = 100;
char grade = getGrade(score);
System.out.println("Score: " + score);
System.out.println("Total: " + total);
System.out.println("Grade: " + grade);
}
private char getGrade(float score)
{
char grade = 'F';
if (score >= 90)
grade = 'A';
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
return grade;
}
public static void main(String[] args)
{
new Grade();
}
}
答案 2 :(得分:0)
正如@Keppil所提到的,sum / tot
可能总是产生一个介于0和1之间的值。您可能想要更改您正在比较的阈值(即:0.9
而不是90
等等。)
另一方面,如果您对 if(sum / tot&gt; = 90)条件不满意,您肯定知道sum / tot
严格不足超过90 。因此,如果sum / tot <= 89.99
,您无需签入以下测试。顺便说一下,那将是危险的:想象一下sum / tot == 89.999
?你的任何条件都不会得到满足。
我建议创建一个产生等级的方法,如下所示:
public static char gradeFor(final float tot, final float sum) {
float ratio = tot / sum;
if(ratio >= 0.9f) {
return 'A';
}
if(ratio >= 0.8f) {
return 'B';
}
if(ratio >= 0.7f) {
return 'C';
}
if(ratio >= 0.6f) {
return 'D';
}
if(ratio >= 0.5f) {
return 'E';
}
return 'F';
}
最后一件事:似乎没有你可以返回 E 的情况......是否有意?
总结一下,我相信你可能想看看这个:
tot
和sum
为十进制值100f
,如@Keppil所述)tot / sum
大于89.99 且低于90 )'E'
感到困扰:p)干杯!
答案 3 :(得分:0)
switch语句并不总是好用的。为什么?切换语句只适用于原始数据类型和枚举类型。但是,您可以对诸如bytes,double,int等原始类型使用包装类。