2014-07-06 55 views
0

因此,我編寫了一個短代碼,可以將「框」(矩形)移動到右側。這部分運作良好。然後,我想看看,這個盒子有多少「步驟」直到它停止。所以,println應該打印控制檯的大小和步驟的數量。但它打印「零」。變量未從方法中更新

import acm.program.*; 
import acm.graphics.*; 

public class animation extends GraphicsProgram{ 

public void run(){ 
    int x=0; 
    GRect box = new GRect(50,50); 
    add(box, 10,10); 
    moveBox(box, x); 
    println(getWidth() + ", " + x); 
} 

public int moveBox(GObject box, int x){ 
    while(true){ 
     box.move(10,0); 
     pause(50); 
     x++; 
     if (box.getX()==getWidth()) break; 
    } 
    return x; 
} 

} 
+0

也許你應該閱讀[原始類型](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)。 –

回答

3

您在方法中返回x,但將其從調用方中丟棄。其重新分配給您的來電者的x變量

x = moveBox(box, x); 
+0

謝謝!事實上,它現在顯示了19個步驟=)所以,「返回」並不能完成所有工作。我也必須修復返回的變量,對吧?再次感謝 – user3349993

+0

@ user3349993'run'中的''x'和'moveBox'中的''x是完全不相關的(從某種意義上說,改變一個不會影響另一個)。 –

+0

我知道。儘管我將run()中的變量重命名爲「steps」,但我顯然忘了這麼做。我問的是像「steps = moveBox(box,x)」這樣的任務。但不管怎麼說。謝謝 – user3349993

1
return x; 

只想說 - 我是回此方法的值。

但是調用者應該收到返回的值。

所以要接收返回的值,我們應該將返回的值分配給某個變量。

x = moveBox(box, x); 

現在=左邊的x將返回值。

如果我們只是這樣寫moveBox(box, x);然後 值返回,但沒有人收到它。

+0

是的,我明白了。這就是我從Sotirios Delimanolis所要求的。 感謝您的回答! – user3349993

1

要調用moveBox(box, x);返回一個值,但你沒有任何東西,將捕獲的值從方法moveBox被拋出要麼你可以這樣做

int moves = moveBox(box, x); 
System.out.println("Movements : "+moves); 

System.out.println("Movements : "+moveBox(box, x)); 
+0

yeap,我從以前的答案中得到它。不管怎麼說,還是要謝謝你! – user3349993