2017-01-30 150 views
1

是否有可能检查一个String变量是否因为while循环的任何两次迭代而发生了变化?Java- while循环检查变量是否在两次迭代之间变化

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

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

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

+7

您可以在每次迭代步骤之后添加一个“您最后一次迭代的玩家”变量,并与之进行比较。 – Lehue

+1

'String's在Java中是不可变的,所以除了改变它指向的对象内存分配段之外,你不能改变它。 – CraigR8806

回答

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 
} 

当你想等待一个值来改变有更好的方式(wait,并notify为例)。如果你想这样做,无论如何想在每次迭代

+0

啊,现在我感觉很傻!谢谢 – Thomas

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

其他答案对于如何做这种检查是正确的。

但是他们缺少一个关键点:你不只是放下while循环一样

while (true) { 
    String newValue = ... 
    if (!newValue.equals(oldValue)) {... 
} 

没有睡眠声明!关键在于任何现代CPU都可以调用该方法来“获取”每秒钟的数值。但是这样做没有意义 - 因为这会让你的CPU使用率达到100%。相反,你应该允许在这样的呼叫之间有一段时间。

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