Loop只运行一次

时间:2012-12-05 15:55:10

标签: java loops while-loop

我的问题是,当我运行它时,我的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);

    }

}

5 个答案:

答案 0 :(得分:6)

 if(exit = true) {
      break;
 }

应该是

 if(exit == true) {
      break;
  }

甚至更简单,只需使用

即可
 if(exit){
   break;
 }

exit=true指定 true 退出,因此if条件为true,因此它会突破循环。

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

答案 1 :(得分:3)

if(exit = true) 

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

if (exit)

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

您无需对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值为false。在这种情况下,只需使用while (true)。并在循环中的某处更改exit的值。

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

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

    if (someCondition) {
        exit = false;
    }

}

答案 2 :(得分:2)

您正在使用

if(exit = true) {

而不是

if(exit == true) {

甚至更好

if (exit) {

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

答案 3 :(得分:1)

这是因为这一行:

if(exit = true)

您在此处 <{strong> true分配给exit。使用==比较值:

if(exit == true)

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

if(exit)

答案 4 :(得分:1)

if (exit = true)会将值exit设置为true。您需要使用==

进行比较