Java- While循环检查变量是否在两次迭代之间发生变化

时间:2017-01-30 12:26:58

标签: java while-loop

是否可以检查自变量循环的任何两次迭代后String变量是否发生了变化?

while (true) {    
    String player=json_obj.getString("username");
    System.out.println("Found Player "+player);
}

我的理由是,如果在while循环的每次迭代之间没有改变,我不想打印出播放器变量。

编辑* 不确定为什么我的帖子会收到投票,因为这是一个有效的问题。 *

3 个答案:

答案 0 :(得分:2)

player的先前值保留在另一个变量中,并进行比较:

String oldPlayer="";
while (true) {    
    String player = json_obj.getString("username");
    if (!player.equals(oldPlayer)) {
        System.out.println("Found Player "+player);
        oldPlayer = player;
    }
}

这假设您的实际循环包含更多逻辑,因为基于您发布的代码,此循环将永远不会结束,并且json_obj.getString("username")将始终返回相同的值。

答案 1 :(得分:2)

关于如何进行此类检查的其他答案是正确的。

但他们缺少一个关键点:你不只是放下一个像

这样的循环循环
while (true) {
  String newValue = ...
  if (!newValue.equals(oldValue)) {...
}

没有睡眠声明!关键是任何现代CPU都可以调用该方法来“获取”每秒数万亿的时间。但这样做没有意义 - 因为这只会让你100%的CPU使用率。相反,你应该在这些电话之间留出一段时间。

除此之外:我只是假设你在其他一些实际更改这些字符串的线程中运行了其他代码?如果没有,上面的代码将永远循环!

答案 2 :(得分:0)

这很容易:

String oldValue = "";
while (true)
{
    String player=json_obj.getString("username");
    if (!oldValue.equals(player))
    {
        System.out.println("Found Player "+player);
        break; // quit loop when player found?
    }
    oldValue = player
}

当您尝试等待值更改时,有更好的方法(例如waitnotify)。如果你想这样做,无论如何都要考虑不要制作循环"忙着等待#34;在每次迭代结束时进行小睡眠