我只想确保在我提交作品之前,我在下面编写的代码已正确翻译。该方法确实有效,但我觉得我可能写错了。
伪代码:
assign i the value 0
WHILE i is less than the length of the array minus 1
let bubbleI be the bubble at index i in the bubbles array
assign j the value i + 1
WHILE bubbleI is not popped AND j is less than the length of the bubbles
array
let bubbleJ be the bubble at index j in the bubbles array
IF bubbleJ is not popped AND bubbleI is touching bubbleJ
pop both bubbleI and bubbleJ
END IF
increment j by 1
END WHILE
increment i by 1
END WHILE
我的代码:
private void popAll() {
int i = 0;
while (i < bubbles.length - 1){
bubbles[i] = bubbles[i];
int j = i + 1;
while (bubbles[i].isPopped() == false && j < bubbles.length){
bubbles[j] = bubbles[j];
if (bubbles[j].isPopped() == false && bubbles[i].isTouching(bubbles[j]) == true){
bubbles[i].pop();
bubbles[j].pop();
}
j++;
}
i++;
}
}
答案 0 :(得分:2)
我认为&#34;让泡泡成为泡泡数组中指数i的泡沫&#34;应该成为Bubble bubbleI = bubbles[i];
,而不是那些实际上没有做任何事情的任务。
在if语句中与true
和false
进行比较也很不寻常 - foo == true
与foo
完全相同,foo == false
与!foo
完全相同。
最后,带有初始化和增量的while循环正是for
语句的用途,所以我写下这样的全部内容:
private void popAll() {
for (int i = 0; i < bubbles.length - 1; i++) {
Bubble bubbleI = bubbles[i];
for (int j = i + 1; !bubbleI.isPopped() && j < bubbles.length; j++) {
Bubble bubbleJ = bubbles[j];
if (!bubbleJ.isPopped() && bubbleI.isTouching(bubbleJ)) {
bubbleI.pop();
bubbleJ.pop();
}
}
}
}
或者,您可以保留while循环..目前还不清楚是否预期您会逐字翻译伪代码,或者您尝试编写惯用代码而不是......