2012-05-18 20 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和线程的原型,我认为你只是为了学习而这样做,但它使事情变得复杂。在软件行业保持简单和简单的复杂程度,我向你保证简单!