这不是家庭作业,但老师给我们帮助学习考试是一种做法。但我不会把它转交给老师。 (我希望这是允许的)
他希望用户输入成绩并为其分配一个字母等级。 if语句很容易,但我不能使用任何东西!我必须使用切换方法。
这是我的功能类:
public class Grade {
public double getGrade(int input)
{
double inputGrade;
switch(input)
{
case 1: inputGrade >= 90;
break;
case 2: inputGrade >= 80;
break;
case 3: inputGrade >= 70;
break;
default:
grade = 60;
}
return grade;
}
}
这是我的测试类:
import java.util.*;
public class TestGrade
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int input = scan.nextInt();
Grade lGrade = new Grade();
double finalGrade = lGrade.getGradeSwitch(input);
System.out.println("Your toll is $" + finalGrade);
}
}
我只是没有足够的编程来拥有这种分析思维。我试图完成它,我还没有找到一种方法将用户输入(int)转换为字母等级(字符串)而不使用if语句。
我知道这是不完整的,但这是我可以走的,而不会犯错误。
编辑:哇!谢谢你们,我讨厌挑选一个正确答案,因为很多人帮助了我!
这就是我最终的结果(有效:D)
public String getGrade(int input)
{
String letterGrade;
switch(input/10)
{
case 9: letterGrade = "A";
break;
case 8: letterGrade = "B";
break;
case 7: letterGrade = "C";
break;
case 6: letterGrade = "D";
default:
letterGrade = "F";
}
return letterGrade;
}
答案 0 :(得分:6)
好吧,我的假设是你会输入0-100的数字等级,你想要的字母等级为“90-100:A; 80-89:B; ......; 60-69:D ; 0-59:F“。
如果情况并非如此,那么您在编程方面的第一课就是:编码中最重要的部分是明确写出规范和要求
话虽如此,有聪明而愚蠢的方法。
愚蠢的方法:
像现在一样使用“输入”上的开关
由于值90,91 ... 100都应该被视为相同,所以将它们全部放在单独的开关案例中但只在最后一个中完成工作(已知) as fall-through; see SwitchDemo2 on this page for how that works)
对于最后一个值(例如,如果从100开始并且向下,则为90),switch语句将为letterGrade =“A”;打破;
一旦达到89的情况,你重复与100到90相同的逻辑
泡沫,冲洗,重复,直到60
将Fs作为默认情况处理。
这将是非常长的,非常愚蠢(如蛮力)并且非常讨厌写作,以及一个出色的教学工具,可以解释为什么如果你可以提供帮助,你再也不想再写下愚蠢的代码了。
更优雅的解决方案(在此处插入适当的星球大战报价)
是的,事实是,除了100之外,它们都是从9开始的2-diit#。
那么,要在1个案例陈述中处理它们,那么为90和99之间的所有#s打开一些给你“9”的值是不是很好?
我希望你马上知道答案......提示下面......
是的,只需将整数除以10!
因此,您需要将数字等级切换为10, 情况为10,9,8,7,6,并默认映射到F。
希望这能够为您提供足够的理由来提出可行的解决方案,同时展示分析如何发挥作用。
答案 1 :(得分:3)
我尽可能彻底地评论了这一点。希望你能够跟随。由于这不是一个家庭作业问题,我发布解决方案没有问题。有时你只需要看到代码“得到它”,所以就在这里。如果您对我写的内容有任何疑问,请发表评论,我会澄清答案。
public static String getGrade(int numberGrade) {
// There are two parts of the number grade that you really
// care about. The first is the quotient after division
// by 10. The second is the remainder after division by
// 10. The quotient will tell you where it is an A, B, C
// D, or F. The remainder will tell you whether it should
// have a +, -, or nothing following the letter.
//
// Let's take the grade 73 as an example. The quotient would
// be 7, with a remainder of 3. Because it has a quotient of
// 7, you know it's a C. Because of the 3, you know it should
// have a minus sign (-) after it.
//
// Once you know the pattern, you can pretty easily apply
// a switch statement to it and produce a letter grade.
// Variables for the quotient and remainder, described above
int quotient = numberGrade / 10;
int remainder = numberGrade % 10;
// This will hold the final letter grade
String letterGrade;
switch (quotient) {
case 10:
// The student got a 100%, so just return A+
return "A+";
case 9:
// 90-99 is an A
letterGrade = "A"; break;
case 8:
// 80-89 is a B
letterGrade = "B"; break;
case 7:
// 70-79 is a C
letterGrade = "C"; break;
case 6:
// 60-69 is a D
letterGrade = "D"; break;
default:
// Anything 59 or below is an F
return "F";
}
switch (remainder) {
// For example, 70-73 are C-
case 0: case 1: case 2: case 3:
letterGrade += "-"; break;
// Likewise, 77-79 are C+
case 7: case 8: case 9:
letterGrade += "+"; break;
// Everything else just falls through, no + or - needed
}
// You are left with a letter grade consisting of
// an A, B, C, D or F, and a plus or minus where
// it is appropriate.
return letterGrade;
}
这是一个非常简单的演示方法:
for (int i = 100; i >= 0; i--) {
System.out.println(i + " = " + getGrade(i));
}
它将打印以下内容:
100 = A+
99 = A+
98 = A+
97 = A+
96 = A
95 = A
94 = A
93 = A-
92 = A-
91 = A-
90 = A-
89 = B+
88 = B+
87 = B+
86 = B
答案 2 :(得分:1)
switch语句不接受条件值,即它不会查找像true
这样的false
或inputGrade >= 70;
答案,而是查找项目 {{1 n
switch(
n
中的等于)
的 x
} case
x
。
此外,切换案例以冒号(:
)结束,而不是半结尾。
有关使用特定Java示例的switch语句的一般说明,请参阅this link。
答案 3 :(得分:1)
这是关于如何做到这一点的另一个提示。
如果整数将等级除以10会怎样?
答案 4 :(得分:1)
Switch语句仅适用于与给定案例匹配的值(以及默认值)。 使用switch语句编写它的唯一方法是为每个可能的分数设置一个案例。
你会这样做:
switch (score)
{
case 0:
case 1:
...
case 80:
case 81:
...
case 89:
return "B";
case 90:
...
case 100:
return "A";
break;
}
OR
您可以通过先除以10将其减少为11个可能案例的列表。
那会让你:
switch (score / 10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
return "F";
case 5:
return "E";
case 6:
return "D";
case 7:
return "C";
case 8:
return "B";
case 9:
case 10:
return "A";
}
或类似的东西(当然这假设您的成绩对应于50 + = E,90 + = A等)。
答案 5 :(得分:0)
这是一个起点:作为整数的'A'字符的值为65.如果将值66转换为字符,您认为会发生什么?
答案 6 :(得分:0)
进行此修正
double grade; // i think you mispelled it inputGrade
和
case 1: grade = 90; // inputGrade >= 90 is an expression and is not valid
break;
答案 7 :(得分:0)
您是否已了解Enums了吗?我的建议是考虑枚举如何帮助你得到答案。对不起,我不能在不破坏你的时刻的情况下给你任何帮助。
答案 8 :(得分:0)
我在代码中没有看到您将返回一封信的任何地方。
你可能想用英语写一下,看看你错过了什么。
例如: 用户输入数字等级 数字等级转换为字母等级 打印出数字和字母等级。
然后,写出主要的难点部分,第2部分。 可能的成绩是...... 可能的输入范围是...... 返回成绩
如果你把它写得更清楚,非常一步一步,因为计算机将如何处理它,那么你应该看看如何做到这一点。
假装你向二年级学生解释如何做到这一点,它必须是非常基本的指示。
答案 9 :(得分:0)
首先,如果您的功能是将等级作为整数并返回字母等级,为什么它的返回类型为double
?
在处理完之后,这里有一个提示:
等级范围从0到100,因此在您的switch语句中处理101个案例。如果你愿意,你可以写出所有101个案例。但是,您能想出一种减少案件数量的方法吗? (大提示:所有等级边界都是10的倍数)
答案 10 :(得分:0)
我很无聊,想出了这个。我知道它也不使用switch语句,但是anywho:
private string GetGrade(int grade)
{
return ((char)((int)(Math.Max((Math.Min(10 - (grade / 10) + 64, 69)), 65))))
.ToString().Replace("E", "F");
}
我只是想看看我是否可以使用字符代码。可能还有一个更短的路,但哦,哦,哦,对不起,这是C#。
答案 11 :(得分:-1)
这个怎么样:
static int[] SCORES =
{ 90, 80, 70, 60, 0 };
static String[] GRADES =
{ "A", "B", "C", "D", "F" };
String letterGrade(int pct)
{
for (int i = 0; i < SCORES.length; i++)
if (pct >= SCORES[i])
return GRADES[i];
}
这假设pct
为正。它使用单个if
语句,因此我不确定这是否有资格作为有效解决方案。