我的问题是,当我运行它时,我的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);
}
}
答案 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。您需要使用==