Java—清理大量if语句

Java—清理大量if语句,java,if-statement,nested-loops,Java,If Statement,Nested Loops,我正在用Java编写一个小项目,它类似于2048游戏,它几乎完全基于数组操作。我为我遇到的一个问题写了一个解决方案,它工作得很好,但是代码非常混乱。如果有人能帮忙清理的话,也许可以用一种不同的技术或者别的什么,那就是很多If语句 // This bit gets rid of the empty tiles between numbers. // Eg {2,2,0,4} becomes {2,2,4,0}. for(int i =1; i<row.length; i++)

我正在用Java编写一个小项目,它类似于2048游戏,它几乎完全基于数组操作。我为我遇到的一个问题写了一个解决方案,它工作得很好,但是代码非常混乱。如果有人能帮忙清理的话,也许可以用一种不同的技术或者别的什么,那就是很多If语句

// This bit gets rid of the empty tiles between numbers.
    // Eg {2,2,0,4} becomes {2,2,4,0}.
    for(int i =1; i<row.length; i++) {

        if(row[i-1] == 0)
        {
            row[i-1] = row[i];
            row[i] = 0;
        }
    }

    for(int j=row.length-1; j>=1; j--) {
        if(row[j-1] == 0 ) {
            row[j-1] = row[j];
            row[j] = 0;
        }
    }

    int nonEmpty = 0; // Count the number of non empty tiles
    for(int i=0; i<row.length; i++) {
        if(row[i] != 0)
            nonEmpty++;
    }

    if(nonEmpty == 2) {
        if(row[1] == row[0]) {
            row[0] *= 2;
            row[1] = 0;
        }
    }
    else if(nonEmpty == 3) {
        if(row[1] == row[0]) {
            row[0] *= 2;
            row[1] = row[2];
            row[2] = 0;
        }
        else if(row[2] == row[1]) {
            row[1] *= 2;
            row[2] = 0;
        }
    }
    else if(nonEmpty==4) {
        if(row[1] == row[0]) {
            row[0] *= 2;
            row[1] = 0;

            if(row[2] == row[3]) {
                row[2] *= 2;
                row[3] = 0;
            }
        }
        else if(row[2] == row[1]) {
            row[1] *= 2;
            row[2] = row[3];
            row[3] = 0;
        }
        else if(row[3] == row[2]) {
            row[2] *= 2;
            row[3] = 0;
        }

    }

    // Get rid of 0s between numbers again.
for(int i =1; i<row.length; i++) {

        if(row[i-1] == 0)
        {
            row[i-1] = row[i];
            row[i] = 0;
        }
    }

    for(int j=row.length-1; j>=1; j--) {
        if(row[j-1] == 0 ) {
            row[j-1] = row[j];
            row[j] = 0;
        }
    }
//此位去除数字之间的空平铺。
//Eg{2,2,0,4}变成{2,2,4,0}。
对于(int i=1;i=1;j--){
if(第[j-1]行)==0){
第[j-1]行=第[j]行;
行[j]=0;
}
}
int nonEmpty=0;//计算非空磁贴的数量
对于(inti=0;i试试这个

void set(int indexFrom, int... values) {
    for (int v : values)
        row[indexFrom++] = v;
}
重写

if(row[1] == row[0]) {
    row[0] *= 2;
    row[1] = row[2];
    row[2] = 0;
}
else if(row[2] == row[1]) {
    row[1] *= 2;
    row[2] = 0;
}


我觉得很好。不管你有多少if/else/conditional语句。是的,对我来说很酷。你可以使用
swtich()
if-else-if语句,而不是像您在相同数组上迭代的那样,可以将一些逻辑组合成更少的
for
循环吗?您是否考虑过Java中的集合框架。我希望链表可以为您解决这个问题
if (row[1] == row[0])
    set(0, row[0] * 2, row[2], 0);
else if (row[2] == row[1])
    set(1, row[1] * 2, 0);