gpt4 book ai didi

Java while循环的微妙之处

转载 作者:行者123 更新时间:2023-11-30 03:57:34 25 4
gpt4 key购买 nike

我有以下代码:

while(!loggedIn) {
loggedIn = login.getDone();
}
System.out.println("madeIt");

即使我知道 login.getDone() 在某个时刻返回 true,打印行也永远不会执行。但是,如果我使用以下代码:

while(!loggedIn) {
loggedIn = login.getDone();
System.out.println(loggedIn);
}
System.out.println("madeIt");

然后执行最后一个打印行。我不知道为什么。有谁知道为什么会发生这种情况吗?

有关更多代码,请参阅我的整个主类:

public class GameManager {
public static void main (String args[]) {
boolean loggedIn = false;
String username;
int playerNum;
int i = 0;
Login login = new Login();
while (!loggedIn){
loggedIn = login.getDone();
//System.out.println(loggedIn);
}
login.close();
System.out.println("Logged in");
}
}

以及整个登录类:

import squint.*;
import javax.swing.*;
import java.util.*;

public class Login extends GUIManager {
private final int WINDOW_WIDTH = 200, WINDOW_HEIGHT = 150;

private JButton login;

String name;
boolean done;
int playerNumber;

public Login() {
done = false;
this.createWindow( WINDOW_WIDTH, WINDOW_HEIGHT );
this.setTitle("Hearts Login");
login = new JButton("Click");

contentPane.add(login);
}

public void buttonClicked( ) {
done = true;
System.out.println(done);
}

public boolean getDone() {
return done;
}

}

眯眼可以在 http://dept.cs.williams.edu/~cs134/squintV2.20.jar 找到

最佳答案

如果 loggeIngetDone 返回的变量被另一个线程设置为 true 并且未声明,则可能会发生这种情况 volatile

如果您提供更多代码,可能会更容易确定您的问题。

关于Java while循环的微妙之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com