有没有更整洁的方法?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,我一直在为一个游戏制定一些规则,我研究了如何在逻辑上做到这一点,并得出了上面的代码,这些代码工作正常,但看起来有点混乱——有没有更整洁或更有效的方法来编写这些代码?非常感谢任何指针。我建议您对变量使用更具描述性的名称。什么是r?什么是f?我猜f是西装的某种数值表示,因为你把它和k比较,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
总体而言,可能还有更多关于代码的内容,但第一步是以自文档的方式编写代码。我建议您对变量使用更多描述性名称。什么是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());
}