-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 in process [there was repeating text indentation],但它们也没有工作)

问题是该进程似乎连续多次附加相同的数字并跳过其他数字,我不知道为什么。

该程序本身的任务是找到一个具有最多除数的数字,从 1 到“findUpTo”(用户输入)不产生余数。

我对 SwingWorker 比较陌生,所以我在理解这个问题时遇到了一些困难。

4

1 回答 1

0

正如你所说,当它与找到最多除数有关时,我很难理解你的代码。我会更像一个算法问题来处理你的问题。

  1. 我们需要知道List对象publishedValues的内容。只需在您的问题中发布它的内容。process 函数中的 for 循环很简单,可以正常工作。但是,我不喜欢您如何在不清除的情况下一直附加到 GUI 对象编号,无论是什么。

  2. 我发现 finalNumber 的代码有点混乱,因为对“if(count > finalNumber..)”的几个依赖以及它的影响。我的建议是在得到所有除数后进行比较。使调试更容易。

  3. 最后,因为我认为这是一个算法问题,所以在没有所有这些 GUI 和线程的情况下对您的代码进行原型设计。我认为您这样做只是为了学习,但这会使事情复杂化。软件行业非常重视让事情变得简单,并且没有想象中那么复杂。我挑战你保持简单!

于 2012-05-18T19:28:14.640 回答