【问题标题】:Variable Will Not Update (Inside If Statement)变量不会更新(在 If 语句中)
【发布时间】:2019-09-19 03:00:31
【问题描述】:

在一个学校项目中工作,我们应该修改游戏以使其具有教育意义。我想通过变量 moduleThree 在数字 0、1 和 2 之间循环。但是,当我将它设置为与我最初定义的值不同的值时,该变量将不会更新,这非常令人沮丧。

我尝试将 if/else 链放入带 return 的不同方法中,但这不起作用。我尝试将它放在多个位置。

public class Alien extends Actor
{
    int SPEED = -7; // Speed of 10 in left direction "-"
    int tempType = (int)(Math.random() * ((2-0) + 1));
    int controlType = 0;
    int moduleThree = 0;

    public Alien() {

    }

    public void act() {
       move (SPEED);
       int timer = 10;
       if (timer>0){
           timer--;
           if(timer == 0) {
               timer = 10;
               controlType++;
               moduleThree = controlType % 3;
               if(moduleThree == 0){
                  ((SpaceLand)(getWorld())).pos.swap("bee");
               }
               else if(moduleThree  == 1){
                  ((SpaceLand)(getWorld())).pos.swap("alien");
               }
               else if(moduleThree  == 2){
                  ((SpaceLand)(getWorld())).pos.swap("soldier");
               }
           }
       }

moduleThree 在计算 controlType % 3 时应该循环 0、1 和 2,但不会发生更新。即使我手动将其设置为 4,也没有任何反应。非常烦人。

【问题讨论】:

  • 这段代码看起来似是而非; timer9 不是 0,所以 if(timer == 0) { 将是 false。另外,((SpaceLand)(getWorld())) 吓到我了。
  • @ElliottFrisch 计时器 9 怎么样?计时器不应该循环吗,因为当计时器高于0时它会不断循环?
  • timer-- 不是循环。是timer = timer - 1;因为timer 10,之后是9。
  • @JackTapia 您可以通过将if (timer>0) 更改为while(timer > 0) 来使其循环,但请注意,当timer 达到0 时,您会将其重置为10,这将导致无限循环。

标签: java variables if-statement greenfoot


【解决方案1】:

int timer = 10; 行声明了一个局部变量,因此每次调用act() 开始时计时器总是设置为 10,并且每次调用后都会忘记该变量。看起来您打算将 timer 声明为类的一个字段,以在动作调用之间保持其值。如果您将定义移至声明 moduleThree 的下方,我认为它会按照您的意图进行。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多