0

私の問題は、実行時にwhileループが1回だけ実行されることです。これが私のコードです。誰かがそれをチェックして、他の障害を探してくれたらとてもありがたいです (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=true終了にtrueを割り当てます。したがって、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おそらく、値が。の場合まで、ループを無限に実行する必要があります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が持つことができる最大値である、よりも小さいため、無限ループになります。long9223372036854775807

于 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 に答える