【问题标题】:Variable is returned not updated from the method返回的变量未从方法更新
【发布时间】:2014-07-06 17:28:34
【问题描述】:

所以,我编写了一个短代码,将“框”(矩形)向右移动。这部分效果很好。然后,我想看看这个盒子走了多少“步”才停下来。所以,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;
}

}

【问题讨论】:

标签: java methods


【解决方案1】:

您在方法内返回x,但从调用者那里丢弃它。将其重新分配给调用者的 x 变量

x = moveBox(box, x);

【讨论】:

  • 谢谢!事实上,它现在显示了 19 个步骤 =) 所以,“返回”并不能完成所有工作。我还必须修复返回的变量,对吗?再次感谢
  • @user3349993 run 中的 xmoveBox 中的 x 完全不相关(从某种意义上说,改变一个不会影响另一个)。
  • 我知道。虽然我将 run() 中的变量重命名为“steps”,但显然我忘了这样做。我在问诸如“steps = moveBox(box, x)”之类的 aobut 分配。但无论如何。谢谢
  • @user 哦,返回值基本上是作为解决方法调用异常的值。如果你不将它分配给任何东西,你只需将其丢弃,它就会从堆栈中弹出。
【解决方案2】:
return x;

只会说 - 我从这个方法返回一个值。

但是调用者应该会收到返回的值。

所以要接收返回值,我们应该将返回值分配给某个变量。

x = moveBox(box, x);

现在 = 左侧的 x 将返回值。

如果我们像这样写moveBox(box, x); 那么 返回值,但没有人收到它。

【讨论】:

  • 是的,我明白了。这就是我向 Sotirios Delimanolis 提出的问题。感谢您的回答!
【解决方案3】:

您正在调用返回值的 moveBox(box, x);,但您没有任何东西可以捕获从方法 moveBox 抛出的值,或者您可以执行类似的操作

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

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

【讨论】:

  • 是的,我从以前的答案中得到了它。还是谢谢!
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 2013-09-24
  • 2015-08-21
  • 1970-01-01
  • 2014-01-16
  • 2016-03-29
  • 2020-06-30
  • 2014-05-12
相关资源
最近更新 更多