有没有更整洁的方法?Java IF public void moveRowItemToBottomFallowed(int r,int f){ int i=行[r].peek().getType(); int j=0; if(底部[f].isEmpty()){ 对于(int k=0;k

有没有更整洁的方法?Java IF public void moveRowItemToBottomFallowed(int r,int f){ int i=行[r].peek().getType(); int j=0; if(底部[f].isEmpty()){ 对于(int k=0;k,java,Java,由于我还在学习java,我一直在为一个游戏制定一些规则,我研究了如何在逻辑上做到这一点,并得出了上面的代码,这些代码工作正常,但看起来有点混乱——有没有更整洁或更有效的方法来编写这些代码?非常感谢任何指针。我建议您对变量使用更具描述性的名称。什么是r?什么是f?我猜f是西装的某种数值表示,因为你把它和k比较,k迭代四个值 总体而言,可能还有更多关于代码的内容,但第一步是以自文档的方式编写代码。我建议您对变量使用更多描述性名称。什么是r?什么是f?我猜f是西装的某种数值表示,因为你把它和k比较,k

由于我还在学习java,我一直在为一个游戏制定一些规则,我研究了如何在逻辑上做到这一点,并得出了上面的代码,这些代码工作正常,但看起来有点混乱——有没有更整洁或更有效的方法来编写这些代码?非常感谢任何指针。

我建议您对变量使用更具描述性的名称。什么是r?什么是f?我猜f是西装的某种数值表示,因为你把它和k比较,k迭代四个值


总体而言,可能还有更多关于代码的内容,但第一步是以自文档的方式编写代码。

我建议您对变量使用更多描述性名称。什么是r?什么是f?我猜f是西装的某种数值表示,因为你把它和k比较,k迭代四个值

总体而言,可能还有更多关于代码的内容,但第一步是以自文档的方式编写代码。

我想让代码更具可读性。乍一看,我会抽离

  • for
    循环,或者可能是
    if
    块的全部内容
  • 第二个长
    的表达式,如果
为新方法(以及变量)使用描述性名称。这在可读性上有很大的不同。

我想让代码更具可读性。乍一看,我会抽离

  • for
    循环,或者可能是
    if
    块的全部内容
  • 第二个长
    的表达式,如果

为新方法(以及变量)使用描述性名称。这在可读性上产生了巨大的差异。

有一些表达式可以提取到局部变量中:
行[r]。peek()
底部[f]。peek()
是最明显的。有一些表达式可以提取到局部变量中:
行[r]。peek()
底部[f].peek()
是最明显的标志。

看起来您正在使用
j
作为标志。布尔值更好,但是您可以提前
返回
,而不是设置保护其余处理的条件,从而完全摆脱
j

您正在仔细检查
bottom[f].isEmpty()
是否为
false
,并且可以使用已查找的
i
而不是重复
行[r].peek().getType()

第一个条件的两侧,如果它们最终进行处理,则执行相同的处理,您可以编写一次:

public void moveRowItemToBottomIfAllowed(int r, int f) {
    int i = rows[r].peek().getType();
    int j = 0;
    if (bottom[f].isEmpty()) {
        for (int k = 0; k < 4; k++) {
            if ((k == f) || (bottom[k].isEmpty()) || (bottom[k].peek().getType() != i)) {
                continue;
            }
            j = 1;
        }
        if (j == 0) {
            bottom[f].push(rows[r].pop());
        }
    } else if ((!bottom[f].isEmpty()) && (rankTrueFalse(rows[r].peek(), bottom[f].peek())) && (rows[r].peek().getType() == bottom[f].peek().getType())) {
        bottom[f].push(rows[r].pop());
    }
}

看起来您正在使用
j
作为标志。布尔值更好,但是您可以提前
返回
,而不是设置保护其余处理的条件,从而完全摆脱
j

您正在仔细检查
bottom[f].isEmpty()
是否为
false
,并且可以使用已查找的
i
而不是重复
行[r].peek().getType()

第一个条件的两侧,如果它们最终进行处理,则执行相同的处理,您可以编写一次:

public void moveRowItemToBottomIfAllowed(int r, int f) {
    int i = rows[r].peek().getType();
    int j = 0;
    if (bottom[f].isEmpty()) {
        for (int k = 0; k < 4; k++) {
            if ((k == f) || (bottom[k].isEmpty()) || (bottom[k].peek().getType() != i)) {
                continue;
            }
            j = 1;
        }
        if (j == 0) {
            bottom[f].push(rows[r].pop());
        }
    } else if ((!bottom[f].isEmpty()) && (rankTrueFalse(rows[r].peek(), bottom[f].peek())) && (rows[r].peek().getType() == bottom[f].peek().getType())) {
        bottom[f].push(rows[r].pop());
    }
}

对于int值上的循环,仅使用i、j和k表示紧密。不要删除问题中的代码,这样其他读者就可以知道问题的内容。对于int值上的循环,仅使用i、j和k表示紧密。不要删除问题中的代码,这样其他读者就可以知道问题的内容。+1表示提取和描述性名称。干净代码的基础,就在那里+1用于提取和描述性名称。干净代码的基础,就在那里!
public void moveRowItemToBottomIfAllowed(int r, int f) {
    if (moveIsAllowed(r,f)) bottom[f].push(rows[r].pop());
}