我是否正确转换了此伪代码?

时间:2017-11-12 20:54:42

标签: java loops methods parameters

我只想确保在我提交作品之前,我在下面编写的代码已正确翻译。该方法确实有效,但我觉得我可能写错了。

伪代码:

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++;
    } 
} 

1 个答案:

答案 0 :(得分:2)

我认为&#34;让泡泡成为泡泡数组中指数i的泡沫&#34;应该成为Bubble bubbleI = bubbles[i];,而不是那些实际上没有做任何事情的任务。

在if语句中与truefalse进行比较也很不寻常 - foo == truefoo完全相同,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循环..目前还不清楚是否预期您会逐字翻译伪代码,或者您尝试编写惯用代码而不是......