while循环的奇怪行为

时间:2014-12-14 11:33:16

标签: java oop while-loop passwords

我目前正在测试各种获取用户输入的方法。今天我正在使用OnClosing()进行测试,这似乎有效。我的问题是,如果我不在while()循环中放任何东西,它就不起作用。它更容易用代码显示:

public MyClass() {
    String myPassword= new Password().getpw();
}

确定。这就是我获取字符串的方式。

public class Password {

private boolean goon                = true;
private JPasswordField jpassword    = new JPasswordField ();

public Password() {
  JFrame f = new JFrame("Type your password here, get it by closing the frame");
  f.getContentPane().add(jpassword);
  f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        goon = false;
      }
      }
     );
  f.setSize(400,65);
  f.show();
}

public String getpw() {
    while (goon);
    return new String(jpassword.getPassword());
}
}

除非我在while()循环中放置一些随机内容,否则这不起作用..让我告诉你。通过这种方式工作

public String getpw() {
    while (goon) {
      System.out.println(""); 
    }
    return new String(jpassword.getPassword());
}

为什么不使用空循环?

1 个答案:

答案 0 :(得分:0)

经过大量搜索,我找到了答案。 发生这种情况是因为循环中的代码“无法访问”,因为循环没有任何循环(仅使用处理器能力)。

我的循环可以用这样的方式说明:

public String getpw() {
    while (goon) {
      doNothing();
    }
    return new String(jpassword.getPassword());
}

private void doNothing() { }

这是一种做循环的可怕方式,但如果你绝对需要做循环。确保循环实际做某事

这仍然是一种可怕的做法,但我会举个例子:

public String getpw() {
    String s = "";
    while (goon) {
      s += "";
    }
    return new String(jpassword.getPassword());
}

现在循环实际上做了一些事情,但不建议这样做。我会使用另一种方法