2012-05-18 19 views
-1
public int[] doInBackground() 
{ 
    int[] finalNumber = new int[2]; 
    finalNumber[0] = 0; 
    finalNumber[1] = 0; 
    int count = 0; 
    int[] forDisplay = new int[2]; 

    outerLoop: 
    for(int i = 1; i <= findUpTo; i++) 
    { 
     forDisplay[0] = i; 
     forDisplay[1] = 2; 
     publish(forDisplay); 

     for(int a = 1; a <= i; a++) 
     { 
      if(isCancelled()) 
       break outerLoop; 
      else 
      { 
       try 
       { 
        Thread.sleep(numGen.nextInt(5)); 
       } 
       catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 

       forDisplay[0] = a; 

       if(i%a == 0) 
       { 
        forDisplay[1] = 1; 

        count++; 

        if(count > finalNumber[1]) 
        { 
         finalNumber[0] = a; 
         finalNumber[1] = count; 
        } 
       } 
       else 
       { 
        forDisplay[1] = 0; 
       } 

       publish(forDisplay); 
      } 
     } 
     setProgress(100*(i+1)/findUpTo); 

     count = 0; 
    } 

    return finalNumber; 
} 

protected void process(List<int[]> publishedValues) 
{ 
    for(int i = 0; i < publishedValues.size(); i++) 
    {/* 
     if(publishedValues.get(i)[1] == 1) 
     { 
      numbers.setFont(new Font("Serif", Font.ITALIC, 16)); 
     } 
     else if(publishedValues.get(i)[1] == 2) 
     { 
      numbers.setFont(new Font("Serif", Font.BOLD, 18)); 
      numbers.append("\t"); 
     }*/ 

     numbers.append(publishedValues.get(i)[0] + "\n"); 
     //numbers.setFont(new Font("Serif", Font.PLAIN, 16)); 
    } 
} 

我不知道爲什麼這不起作用;如果有人能幫助我會很感激。 我試圖在JTextArea發佈時輸出forDisplay [0],一次。 forDisplay [1]用於確定正在處理的字體(我現在評論字體已更改,儘管它正在處理ifs正在進入[有重複文本縮進],但它們也不工作)SwingWorker JTextArea Updates

問題該過程似乎是連續多次追加相同的數字並跳過其他人,我不知道爲什麼。

程序本身的任務是找到一個數字,其中除了1以外的所有餘數都不會產生「findUpTo」(用戶輸入)。

我對SwingWorker比較陌生,所以我在理解這個問題時遇到了一些困難。

+0

這不會編譯。你能修改並創建一個能夠編譯並突出顯示你的問題的例子嗎? – ControlAltDel

+0

另請參閱此[示例](http://stackoverflow.com/a/4637725/230513)。 – trashgod

回答

0

正如你所說,我很難理解你的代碼,因爲它涉及到找到最多的除數。我會更像一個算法問題來解決你的問題。

  1. 我們需要知道List對象publishedValues的內容。只需在你的問題中發佈它的內容。過程函數中的for循環足夠簡單。但是,我不喜歡如何不加清除地繼續添加到GUI對象數字,無論如何。

  2. 我發現finalNumber的代碼有點令人困惑,因爲「if(count> finalNumber ..)」及其效果的一些依賴性,我的建議是在得到所有除數後進行比較。讓調試變得更容易

  3. 最後,因爲我認爲這是一個算法問題,所以沒有所有這些GUI和線程的原型,我認爲你只是爲了學習而這樣做,但它使事情變得複雜。在軟件行業保持簡單和簡單的複雜程度,我向你保證簡單!