关于Java中if-else的优化问题

问题描述

这是一个比较简单的题目,都会写,我想问的是,这些if-else能否优化

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("Enter the number of students:");
    int n = input.nextInt();
    int[] score = new int[n];
    System.out.println("Enter scores:");

    int max = 0;
    for (int i = 0; i < n; i++) {
        score[i] = input.nextInt();
        if (score[i] > max) {
            max = score[i];
        }
    }

    for (int i = 0; i < n; i++) {
        if (score[i] >= max - 10)
            System.out.println("Student " + i + " score is " + score[i] + " and grade is A");
        else if (score[i] >= max - 20 && score[i] < max - 10)
            System.out.println("Student " + i + " score is " + score[i] + " and grade is B");
        else if (score[i] >= max - 30 && score[i] < max - 20)
            System.out.println("Student " + i + " score is " + score[i] + " and grade is C");
        else if (score[i] >= max - 40 && score[i] < max - 30)
            System.out.println("Student " + i + " score is " + score[i] + " and grade is D");
        else
            System.out.println("Student " + i + " score is " + score[i] + " and grade is F");
    }


}
阅读 2.3k
1 个回答

可参考下面的代码

      int max = 100;
        int n=5;
        int [] score={59,84,12,90,100};
        
        int[] zone = {10, 20, 30, 40};
        String[] grades={"A", "B", "C","D","F"};
        String format= "Student %s score is %s and grade is %s";
       
       
        for (int i = 0; i < n; i++) {
            String grade=grades[zone.length];
            for(int j=0; j<zone.length; j++){
                if(score[i]>= max - zone[j]){
                    grade = grades[j];
                    break;
                }   
            }
            System.out.println(String.format(format, i, score[i], grade));
            
        }

基本思路是数据与逻辑分离,消除重复部分, 便于扩展和维护, 但可读性有所下降. 可以通过封装成方法, 提高可读性.

对于区间很多, 对应关系复杂时, 可以使用 Guava 的 RangeMap 类处理, 会更方便.

参考:

https://stackoverflow.com/que...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题