2012-12-05 506 views
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); 

    } 

} 
+0

爲什麼你難以編碼這個醜陋的長文字? –

+1

修復了顯而易見的錯誤之後,它將是**無限循環**。 – jlordo

+0

如果您改用Long.MAX_VALUE,您的代碼會更清晰。 – whiskeyspider

回答

6
if(exit = true) { 
     break; 
} 

應該

if(exit == true) { 
     break; 
    } 

或者更簡單,只是使用

if(exit){ 
    break; 
} 

exit=true分配退出,從而噸如果條件是真的,那麼它打破了循環。

正如@jlordo所指出的,即使在將錯誤修復爲無限循環之後。

+0

ohh yea謝謝你真的解決了這個問題 –

+0

@LennartSchoch沒有problomo,歡迎你:) – PermGenError

+1

沒有人知道這個無限循環? – jlordo

2

您使用

if(exit = true) { 

,而不是

if(exit == true) { 

甚至更​​好

if (exit) { 

但是當你解決它,你將有一個無限循環,因爲所有long的值小於9223372036854775807,這是最長可以擁有的最高價值。

3
if(exit = true) 

這是第一個問題。以上條件將始終如此。你需要做比較而不是分配。事實上,你不應該對布爾變量進行比較。只需使用: -

if (exit) 

其次,你不改變你的exit在while循環的任何地方,所以,它沒有任何意義的使用它作爲退出條件。

而且您不需要硬編碼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; 
    } 

} 
+0

我認爲他的意圖是讓他的停止按鈕退出無限循環。 – WilliamShatner

+0

@WilliamShatner是的,但我懷疑這是否會奏效。 – jlordo

+0

+1對**你可能想要什麼: - ** :) – PermGenError

1

這是因爲該行的:

if(exit = true) 

你是分配trueexit此處。使用==比較值:

if(exit == true) 

而且在布爾值的情況下,你不需要它了比較true。這樣寫:

if(exit) 
1

if (exit = true)將值設置爲true。你需要使用==