【问题标题】:While loop doesn't change the value of variableWhile循环不会改变变量的值
【发布时间】:2015-11-09 13:18:24
【问题描述】:
int time=0;
int x=1;
int w=2;
int y=1;
int h=1;
int t=6;
while (x != w && y != h) {
    boolean s = Abc (a,b,c,time);
    if (s == true) {
        time = time+t;
        x++;
    }
    else if (s = false) {
        time = time++;
    }
}

System.out.println(time);

这是我为学校编写的程序的一部分,我的问题是当程序进入 while 循环时,无论我在循环内做什么,当它退出并打印变量“time”时,值都是相同的作为开始时设置的值。我错过了什么吗? (顺便说一句 Abc 只是一个方法,当我第一次进入循环时应该返回值 true,因此应该将 time 的值更改为 time+t)

【问题讨论】:

  • 试试else if (s == false)(即使有点过头了)
  • (s = false) 应该是:== false
  • s = false -> s == false 否则它将设置 s 为 false 而不是比较它,time = time++ 也不做任何事情。请改用time++
  • 你发布的代码永远不会进入while循环,因为yh是相等的。
  • 你永远不需要比较布尔值; if (s) { ... } else { ... };

标签: java loops while-loop


【解决方案1】:
  1. s = false 是赋值,而不是比较。无论如何,你不需要测试s == false,你只需要一个else 子句(因为原始条件检查s == true)。
  2. 没有理由将time++ 的结果分配给time,因为它会撤消增量(后增量运算符返回变量的先前值,因此当您将该值分配回变量时,您取消增量)。

改变

else if (s = false) {
    time = time++;
}

else {
    time++;
}

编辑:

正如 Anthony Grist 评论的那样,即使在这些修复之后,整个 while 循环也根本不会执行,因为一开始是 y==h

【讨论】:

  • 可能值得点赞@AnthonyGrist 的评论,因为这些修复本身并不会改变时间(无论如何都是紫外线)。
  • @AndyTurner 我错过了。谢谢
猜你喜欢
  • 2022-07-07
  • 2020-10-10
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多