0

我的问题是我的while循环在我运行它时只运行一次。这是我的代码。如果有人会检查它并寻找其他故障,我将非常感激(我是Java编程新手!)

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class Program {

    boolean exit;
    JFrame frame;
    JPanel panel;
    JTextField title;
    JButton start;
    JButton stop;
    long x;


    public Program() {

        frame = new JFrame("Überlast your PC");
        panel = new JPanel();
        title = new JTextField("Überlast your PC v1.0");
        start = new JButton("Start");
        stop = new JButton("Stop");
        x = 1;
        exit = false;

        stop.addActionListener(new ActionListener () {
            public void actionPerformed(ActionEvent e) {

            exit = true;

        }});

        start.addActionListener(new ActionListener () {
            public void actionPerformed(ActionEvent e) {

            panel.remove(start);
            panel.add(stop);
            frame.repaint();
            frame.revalidate();
            start.setForeground(Color.red);
            while(x <= 9223372036854775807L) {

                System.out.println(x * x);
                x++;

                if (exit = true) {                    
                    break;                        
                }                    
            }

        }});

        frame.add(panel);
        panel.add(title);
        panel.add(start);
        frame.setVisible(true);
        frame.setSize(150,100);
        title.setEditable(false);
        start.setForeground(Color.green);
        stop.setForeground(Color.red);

    }

}
4

5 回答 5

6
 if(exit = true) {
      break;
 }

应该

 if(exit == true) {
      break;
  }

甚至更简单,只需使用

 if(exit){
   break;
 }

exit=truetrue分配为退出,因此 if 条件为 true,因此它打破了循环。

正如@jlordo 指出的那样,即使在修复错误之后它也是一个无限循环。

于 2012-12-05T15:56:22.923 回答
3
if(exit = true) 

这是第一个问题。上述 if 条件将始终为真。您需要进行比较而不是分配。实际上,您不应该对布尔变量进行比较。只需使用: -

if (exit)

其次,您不会更改exitwhile 循环中的任何位置,因此将其用作退出条件是没有意义的。

而且您不需要硬编码Long.MAX_VALUE. 您已经定义了该常量。现在,即使你解决了那个问题if,你也将面临这个问题infinite loop。见下文如何: -

// Your below while loop is `infinite`
// every long value will satisfy this condition
while(x <= Long.MAX_VALUE) {  // Don't hard code max long value

      System.out.println(x * x);
      x++;

      // You are not changing `exit` anywhere, so this check is absurd.   
      if (exit) {  
          break;                        
      }                    
}

你可能想要什么: -

可能你想无限地运行你的循环,直到你的exit值 if false。在这种情况下,只需使用while (true). 并更改exit循环中某处的值。

事实上,如果您使用exit作为退出条件,我会将您的while循环更改为: -

while (exit) {
    System.out.println(x * x);

    if (someCondition) {
        exit = false;
    }

}
于 2012-12-05T15:57:00.287 回答
2

您正在使用

if(exit = true) {

代替

if(exit == true) {

甚至更好

if (exit) {

但是当你修复它时,你将有一个无限循环,因为所有long值都小于9223372036854775807,这是 long 可以拥有的最大值。

于 2012-12-05T15:56:45.310 回答
1

这是因为这条线:

if(exit = true)

分配 trueexit这里。用于==比较值:

if(exit == true)

在布尔值的情况下,您根本不需要比较它true。像这样写:

if(exit)
于 2012-12-05T15:57:07.397 回答
1

if (exit = true)将值 exit 设置为 true。你需要比较使用==

于 2012-12-05T15:57:14.547 回答