Java 缩短我的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声明来告诉他们他们的分数。这就是我目前所拥有的。这一切都有效,我只需要缩短if语句。这就是我所拥有的:

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嗯,如果这是在一个地方使用的,那么我也更喜欢你的解决方案:这是迄今为止最优雅的解决方案。没有创建额外的对象或循环,而且非常紧凑。这是迄今为止最优雅的解决方案。没有创建其他对象或循环,而且非常紧凑。