Java 缩短我的if语句
我试图让人们把他们的作业,并得到一个评分的基础上,这些数字。我需要一份if声明来告诉他们他们的分数。这就是我目前所拥有的。这一切都有效,我只需要缩短if语句。这就是我所拥有的:Java 缩短我的if语句,java,Java,我试图让人们把他们的作业,并得到一个评分的基础上,这些数字。我需要一份if声明来告诉他们他们的分数。这就是我目前所拥有的。这一切都有效,我只需要缩短if语句。这就是我所拥有的: if (pC >= 93 ) { System.out.print("\n Your grade is an A"); } else if (pC >= 90) { System.out.pri
if (pC >= 93 )
{
System.out.print("\n Your grade is an A");
}
else if (pC >= 90)
{
System.out.print("\n Your grade is a A-");
}
else if (pC >= 87)
{
System.out.print("\n Your grade is a B+");
}
else if (pC >= 83)
{
System.out.print("\n Your grade is a B");
}
else if (pC >= 80)
{
System.out.print("\n Your grade is a B-");
}
else if (pC >= 77)
{
System.out.print("\n Your grade is a C+");
}
else if (pC >= 73)
{
System.out.print("\n Your grade is a C");
}
else if (pC >= 70)
{
System.out.print("\n Your grade is a C-");
}
else if (pC >= 67)
{
System.out.print("\n Your grade is a D+");
}
else if (pC >= 63)
{
System.out.print("\n Your grade is a D");
}
else if (pC >= 60)
{
System.out.print("\n Your grade is a D-");
}
else if (pC <= 59)
{
System.out.print("\n Your grade is a F");
}
您可以构建阈值和等级标签表
final int [] lbound = {93, 90, 87, 83, 80, 77, 73, 70, 67, 63, 60, Integer.MIN_VALUE};
final String [] label = {"n A", " A-", " B+", " B", " B-", " C+", " C", " C-", " D+", " D", " D-", " F"};
for (int i = 0; i < lbound.length; ++i) {
if (pC >= lbound[i]) {
System.out.print("\n Your grade is a" + label[i]);
break;
}
}
您可以构建阈值和等级标签表
final int [] lbound = {93, 90, 87, 83, 80, 77, 73, 70, 67, 63, 60, Integer.MIN_VALUE};
final String [] label = {"n A", " A-", " B+", " B", " B-", " C+", " C", " C-", " D+", " D", " D-", " F"};
for (int i = 0; i < lbound.length; ++i) {
if (pC >= lbound[i]) {
System.out.print("\n Your grade is a" + label[i]);
break;
}
}
我在您的评分系统中看到一种模式,可用于构建数据结构: 十位数字决定等级-A大于90,或B大于80,但小于90,依此类推。。。 一个人的位置数字决定路基-+7或更多,-0到3,或平原等级3到5。 您可以构建2个映射来存储这些映射:
// These two maps can be moved to a common better place
TreeMap<Integer, String> gradeMapRules = new TreeMap<Integer, String>();
gradeMapRules.put(9, "A");
gradeMapRules.put(8, "B");
gradeMapRules.put(7, "C");
gradeMapRules.put(6, "D");
gradeMapRules.put(0, "F");
TreeMap<Integer, String> subGradeMapRules = new TreeMap<Integer, String>();
subGradeMapRules.put(0, "-");
subGradeMapRules.put(3, "");
subGradeMapRules.put(7, "+");
我在您的评分系统中看到一种模式,可用于构建数据结构: 十位数字决定等级-A大于90,或B大于80,但小于90,依此类推。。。 一个人的位置数字决定路基-+7或更多,-0到3,或平原等级3到5。 您可以构建2个映射来存储这些映射:
// These two maps can be moved to a common better place
TreeMap<Integer, String> gradeMapRules = new TreeMap<Integer, String>();
gradeMapRules.put(9, "A");
gradeMapRules.put(8, "B");
gradeMapRules.put(7, "C");
gradeMapRules.put(6, "D");
gradeMapRules.put(0, "F");
TreeMap<Integer, String> subGradeMapRules = new TreeMap<Integer, String>();
subGradeMapRules.put(0, "-");
subGradeMapRules.put(3, "");
subGradeMapRules.put(7, "+");
您的代码包含大量易于消除的冗余。逻辑的本质是从测试分数到等级的映射,因此您需要一个表达式或函数,它只执行该操作,而不执行其他操作,然后代码的其余部分以统一的方式进行打印。如果您对硬编码的值满意,则格式正确的条件表达式是最干净的:
String grade =
pC >= 93 ? "A"
: pC >= 90 ? "A-"
: pC >= 87 ? "B+"
: pC >= 83 ? "B"
: pC >= 80 ? "B-"
: pC >= 77 ? "C+"
: pC >= 73 ? "C"
: pC >= 70 ? "C-"
: pC >= 67 ? "D+"
: pC >= 63 ? "D"
: pC >= 60 ? "D-"
: "F";
System.out.println("\n Your grade is a "+grade);
您的代码包含大量易于消除的冗余。逻辑的本质是从测试分数到等级的映射,因此您需要一个表达式或函数,它只执行该操作,而不执行其他操作,然后代码的其余部分以统一的方式进行打印。如果您对硬编码的值满意,则格式正确的条件表达式是最干净的:
String grade =
pC >= 93 ? "A"
: pC >= 90 ? "A-"
: pC >= 87 ? "B+"
: pC >= 83 ? "B"
: pC >= 80 ? "B-"
: pC >= 77 ? "C+"
: pC >= 73 ? "C"
: pC >= 70 ? "C-"
: pC >= 67 ? "D+"
: pC >= 63 ? "D"
: pC >= 60 ? "D-"
: "F";
System.out.println("\n Your grade is a "+grade);
听说过转换吗?有时候一堆if语句真的是最简单的方法。开关的长度和复杂度基本相同。为什么它需要更短?请使用数据表,然后搜索它。顺便说一句,如果允许使用分数,那么您将缺少59。有价值的东西。如果你这么做的话,你可以更容易地配置等级级别。我不认为switch语句可以简化这里的事情。我会坚持你现有的代码。听说过这个开关吗?有时候一堆if语句真的是最简单的方法。开关的长度和复杂度基本相同。为什么它需要更短?请使用数据表,然后搜索它。顺便说一句,如果允许使用分数,那么您将缺少59。有价值的东西。如果你这么做的话,你可以更容易地配置等级级别。我不认为switch语句可以简化这里的事情。我会坚持使用你现有的代码。尼特:这和你的代码不太一样。。。谢谢,不规则英语不定代词+1:你还可以做一件事。替换pC lbound[i]你用几行简单的if语句换取了一堆复杂性。从长远来看,对于其他程序员来说,更详细的代码将更容易理解和维护。我认为这个重构没有帮助。@AndyTurner谢谢你的提醒。修复了一个vs a。我不喜欢单独的数组,因为索引很容易弄乱。如果我要这样做,我会创建一个字典。。。谢谢,不规则英语不定代词+1:你还可以做一件事。替换pC lbound[i]你用几行简单的if语句换取了一堆复杂性。从长远来看,对于其他程序员来说,更详细的代码将更容易理解和维护。我认为这个重构没有帮助。@AndyTurner谢谢你的提醒。修复了一个vs a。我不喜欢单独的数组,因为索引很容易弄乱。如果我要这样做,我会创建一个字典。如果选择maps,那么TreeMap更优越,它有NavigableMap API。我认为地租适用于这里。@MarkoTopolnik哦,太好了!!我不知道,谢谢:但是有了你优雅的数学分析,我甚至更喜欢那些硬编码在条件表达式中的少数数据点。@MarkoTopolnik,嗯,如果这是在一个地方使用的,那么我也更喜欢你的解决方案:如果选择地图,那么树形图更优越,有它的NavigableMap API。我认为地租适用于这里。@MarkoTopolnik哦,太好了!!我不知道,谢谢:但有了你优雅的数学分析,我甚至更喜欢用条件表达式硬编码的那几个数据点。@MarkoTopolnik嗯,如果这是在一个地方使用的,那么我也更喜欢你的解决方案:这是迄今为止最优雅的解决方案。没有创建额外的对象或循环,而且非常紧凑。这是迄今为止最优雅的解决方案。没有创建其他对象或循环,而且非常紧凑。