Java switch语句的荒谬用法
我和我的朋友在做一些Java作业。讲师希望他编写一个Java程序,将整数输入转换为数字等级。100-90=A,依此类推。唯一的问题是他必须使用switch语句。他还必须: 在switch语句中包含一个case,它将显示礼貌的 如果用户输入任何小于或大于0的数字,则显示错误消息 超过100人。” 原来我想到这个Java switch语句的荒谬用法,java,switch-statement,Java,Switch Statement,我和我的朋友在做一些Java作业。讲师希望他编写一个Java程序,将整数输入转换为数字等级。100-90=A,依此类推。唯一的问题是他必须使用switch语句。他还必须: 在switch语句中包含一个case,它将显示礼貌的 如果用户输入任何小于或大于0的数字,则显示错误消息 超过100人。” 原来我想到这个 import java.util.Scanner; public class grade { public static void main(String[] args)
import java.util.Scanner;
public class grade
{
public static void main(String[] args)
{
int ng;//number grade
String lg = "";//letter grade
System.out.println("enter grade");
Scanner in = new Scanner(System.in);
ng = in.nextInt();
switch (ng/10)
{
case 10:
case 9:
lg = "A";
break;
case 8:
lg = "B";
break;
case 7:
lg = "C";
break;
case 6:
lg = "D";
break;
default:
lg = "F";
break;
}
System.out.println("You got an " + lg);
}
}
这并不完美,因为它允许大于100和小于0的值,但我试图避免键入100-0之间的每个整数。这似乎是一个荒谬的开关语句用法,我无法想象为什么大学教授会教它,而不是说明干燥原理
是否有更好的方法仍然使用switch语句,但不从100-0键入每个int?如何:
String lg = null;
switch (ng/10)
{
case 10:
if (ng > 100) {
// polite error
break;
}
case 9:
lg = "A"
break;
case 8:
lg = "B";
break;
case 7:
lg = "C";
break;
case 6:
lg = "D";
break;
default:
if (ng < 0) {
// polite error
break;
}
lg = "F";
break;
}
是的,你根本不可能想在这个lol中使用switch语句。但是你建议的方式是我能想到的最好的方式
不过,我会将默认设置为错误场景,因为这可能是小于0或大于100的任何整数。在0和100之间,至少有有限的情况(尽管必须多次重复“F”情况)。整数除法的使用很好;) 好吧,这段代码正式让我难堪,让我哭泣。但在这里,只使用switch语句
import java.util.Scanner;
public class grade
{
public static void main(String[] args)
{
int ng;//number grade
String lg = "";//letter grade
boolean error = false;
System.out.println("enter grade");
Scanner in = new Scanner(System.in);
ng = in.nextInt();
switch (ng/10)
{
case 10:
switch (ng)
{
case 100:
lg = "A";
break;
default:
error = false;
break;
}
break;
case 9:
lg = "A";
break;
case 8:
lg = "B";
break;
case 7:
lg = "C";
break;
case 6:
lg = "D";
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
lg = "F";
break;
default:
error = true;
break;
}
if (error) {
System.out.println("Sorry, the grade must be between 0 and 100");
} else {
System.out.println("You got an " + lg);
}
}
}
Blech.你可以给你的开关表达式增加一些小的复杂度,使情况更简单;这将把
90-100计算为10
,80-89计算为9
,依此类推,101及以上将变为11及以上
,每一个低于0的输入将变为0或负
,因此它们将属于默认值
switch ((ng-ng/100+10)/10)
{
case 10:
lg = "A";
break;
case 9:
lg = "B";
break;
case 8:
lg = "C";
break;
case 7:
lg = "D";
break;
case 6: case 5: case 4:
case 3: case 2: case 1:
lg = "F";
break;
default:
System.out.println("Polite Error");
lg = "";
}
你的方法似乎很好。为什么不把switch包装在一个
if
语句中,检查ng>=0&&ng我会的,但要求是把测试放在switch语句中。我知道这很愚蠢。使用switch语句的目的是让学生能够了解switch语句是如何工作的……以及一些技巧来帮助他们让它工作得更好(比如你的射程缩小技巧).这个例子对你来说可能很可笑……但这完全是离题的。@StephenC教学生识别适合这份工作的工具不是最好的吗?如果我教某人使用锤子,我会让他们泡一杯茶,让他们获得握锤子的经验。但你是对的,这与p无关另一件事是你需要小心帮助他,而不是(有效地)除了他的道德操练之外,他认为练习的要点是让他学会实际的编程技巧。如果他能完成所有的工作,他会学得更好。此外,你认为所有关于干燥原理的学习建议、XYZ的最佳方法等都会直接在一只耳朵里和另一只耳朵里进行。仍在努力学习Java语句的基础知识。但是9-0是无效的输入,但9-0是有效的分数(如果你不学习的话)@沙卡布拉:如果你的case 0:
包含在F
案例中,则不会出现这种情况。唯一的特例是100
,它不能仅使用case 10:
检测,因为它也会捕获101
。是的。我忘记了那一个。重新编辑它以解释坏的范围。没有理由将所有这些分开用自己的-break
语句对0-5进行测试。哦,天哪。这太恶心了。但这可能是在约束条件下最好的方法。@shakabra你想用-1
作为一个值进行测试。这是我一直在寻找的。这似乎是让这个恶心的练习变得更可口的最好方法。@shakabra是的,它缩小了测试范围只需编写一点代码,就可以省去一点额外的错误检查。不过,这需要额外的一两条注释,因为表达式并不完全是直截了当的。
switch ((ng-ng/100+10)/10)
{
case 10:
lg = "A";
break;
case 9:
lg = "B";
break;
case 8:
lg = "C";
break;
case 7:
lg = "D";
break;
case 6: case 5: case 4:
case 3: case 2: case 1:
lg = "F";
break;
default:
System.out.println("Polite Error");
lg = "";
}