2013-07-28 48 views
0

以下是我的動作班,程序可以運行,但有時當你按下按鈕時,它不斷顯示按下狀態,並且結果不能顯示在JTextField按鈕連續顯示按下狀態並且不能顯示結果

public class SsqAction implements ActionListener{ 

    String luckNum=""; 
    private JTextField luckField; 

    public SsqAction(JTextField luckField){ 
     this.luckField=luckField; 
    } 

    public void actionPerformed(ActionEvent event){ 
     int[] a={0,0,0,0,0,0,0}; 
     int tag=0; 

     for(int k=0;k<6;){ 

      double i=Math.random()*33; 
      int temp=(int)Math.ceil(i); 
      a[k]=temp; 
      for(int j=0;j<k;j++){ 
       if(a[j]==a[k]){ 
        tag=1; 
        break; 
       } 
      } 
      if(tag==0){ 
       k++; 
      } 

     } 

     double j=Math.random()*16; 
     int b=(int)Math.ceil(j); 
     a[6]=b; 

     for(int i=0;i<7;i++){ 
      luckNum=luckNum+a[i]+" "; 
     } 

     luckField.setText(luckNum); 

    } 

} 
+0

您發佈的代碼不會導致您描述的問題。請發佈SSCCE,或者只是其他代碼。 – tbodt

+0

你可能有一個無限循環('for(int k = 0; k <6;)')。將痕跡添加到您的代碼中,進行調試或仔細分析以檢查它何時發生。 –

回答

3

在你的for循環

for(int k=0;k<6;) 

你不增加k。在這裏你增加它:

if(tag==0){ 
    k++; 
} 

但是,tag可能被設置爲1這裏:

if(a[j]==a[k]){ 
    tag=1; 
    break; 
} 

break中斷內部循環,而不是外部的)
現在,tag1永遠,並且k將永不增加→無限循環。

提示:使用調試器,他是你最好的朋友。

+1

謝謝@ Maroun,我將你的答案更正了我的程序。我把賦值語句'int tag = 1'放在頂部循環中,它工作。謝謝! – hkk