使if-else解决方案更高效,减少代码行(Java)

时间:2016-10-08 02:28:38

标签: java if-statement switch-statement conditional

在不使用if-else语句的情况下,是否有更有效的方法来编写这样的代码?

private int group1, group2, group3, group4;
private int total = 0

public void assignMembers()
{
    group1 = (int)((6 * Math.random()) + 1);
    group2 = (int)((6 * Math.random()) + 1);
    group3 = (int)((6 * Math.random()) + 1);
    group4 = (int)((6 * Math.random()) + 1);
}

public void calculateSomething()
{
    if(group1 == 3)
    {
        total += 2;
    }
    else if(group1 == 5)
    {
        total += 4;
    }

    if(group2 == 3)
    {
        total += 2;
    }
    else if(group2 == 5)
    {
        total += 4;
    }

    if(group3 == 3)
    {
        total += 2;
    }
    else if(group3 == 5)
    {
        total += 4;
    }

    if(group4 == 3)
    {
        total += 2;
    }
    else if(group4 == 5)
    {
        total += 4;
    }
{

如果组有3个成员,则if-else语句在总数中加2,如果组有5个成员,则加4。

我知道我可以通过"小组来做更高效的事情"数组,但有没有一个没有数组的方法?也许有一种方法可以让calculateSomething方法获得每个组的团队成员数量,而不必重复if-else这么多?任何建议将不胜感激。

5 个答案:

答案 0 :(得分:4)

如果您在代码中发现了一个冗余模式,那么您将创建一个可重复使用的功能。

private int group1, group2, group3, group4;
private int total = 0;

    public void assignMembers()
    {
        group1 = (int)(Math.random()*6 + 1);
        group2 = (int)(Math.random()*6 + 1);
        group3 = (int)(Math.random()*6 + 1);
        group4 = (int)(Math.random()*6 + 1);

        calc(group1);
        calc(group2);
        calc(group3);
        calc(group4);
    }

    public void calc(int group)
    {
        switch (group){
                case 3:
                  total += 2;
                  break;
                case 5:
                  total += 4;
                  break;
        }
    }

更新答案 - 因为要求是:必须在课堂外调用该方法。

private int group1, group2, group3, group4;
    private int total = 0;

        public void assignMembers()
        {
            group1 = (int)(Math.random()*6 + 1);
            group2 = (int)(Math.random()*6 + 1);
            group3 = (int)(Math.random()*6 + 1);
            group4 = (int)(Math.random()*6 + 1);
        }

        private void calc(int group)
        {
            switch (group){
                    case 3:
                      total += 2;
                      break;
                    case 5:
                      total += 4;
                      break;
            }
        }

        public void calculateSomething(){
            calc(group1);
            calc(group2);
            calc(group3);
            calc(group4);
        }

答案 1 :(得分:1)

假设您正在编写java,您应该编写一个case语句并将每个变量传递给该函数。你应该在第一个函数中定义总数,但我不会告诉你如何。无论如何,这样的东西然后在for循环中将每个组传递给它:

public int calculateSomething(groupx){
    switch (groupx) 
        {
            case 3:
            total += 2;
            break;
            case 5:
            total += 4;
            break;
        }

请注意,案例不需要在前一行附近使用括号。

答案 2 :(得分:1)

由于代码中有冗余模式

    private int group1, group2, group3, group4;
    private int total = 0;

    public void assignMembers()
    {
        group1 = randomGen();
        group2 = randomGen();
        group3 = randomGen();
        group4 = randomGen();

        function(group1);
        function(group2);
        function(group3);
        function(group4);
    }

    public int randomGen(){
        int x=(int)(Math.random()*6 + 1);
        return x;
    }
    public void function(int group)
    {
        switch (group){
                case 3:
                  total += 2;
                  break;
                case 5:
                  total += 4;
                  break;
                default:
                  // write here what you need to perform when the group value is 3 or 5

        }
    }

了解更多信息visit this site

答案 3 :(得分:1)

首选数据"接近"代码"一个是以数据为中心的问题。

首先,以声明方式定义额外点。

private static Map<Integer, Integer> extras = new HashMap<Integer, Integer>() {{
    put(3, 2);
    put(5, 4);
}};

请注意,这是代码中唯一出现这些数字的地方,更改或添加更多内容很简单,而且很明显如何操作。

然后使用流来处理一行中的所有组:

public void calculateSomething() {
    total += IntStream.of(group1, group2, group3, group4)
      .map(i -> extras.getOrDefault(i, 0))
      .sum();
}

使用地图甚至可以避免一个if,并且流可以简单地自动重复使用代码。

免责声明:代码可能无法编译或工作,因为它在我的手机上被翻阅(但它有合理的可能性)

答案 4 :(得分:0)

试试这个。

private int group1, group2, group3, group4;
private int total = 0;

public void assignMembers() {
    group1 = updateTotal((int) ((6 * Math.random()) + 1));
    group2 = updateTotal((int) ((6 * Math.random()) + 1));
    group3 = updateTotal((int) ((6 * Math.random()) + 1));
    group4 = updateTotal((int) ((6 * Math.random()) + 1));
}

int updateTotal(int group)
{
    total += group == 3 ? 2 : group == 5 ? 4 : 0;
    return group;
}