为什么这会冻结我的java程序?

时间:2013-12-31 14:11:07

标签: java swing

我正在为我的科学博览会项目制作一个魔方的模拟器,我遇到了一些麻烦。此代码应该通过在sideValues[]数组中设置不同的颜色值来随机化多维数据集。它并不复杂,但它总是冻结我的电脑。 (顺便说一下,method1method2method 3JLabels,计数器整数是为了确保每种颜色不超过9个,drawAndButtons是JPanel显示了多维数据集,而cubeSpace是JPanel drawAndButtons所在。)

method1.setForeground(Color.red);
            method2.setForeground(Color.black);
            method3.setForeground(Color.black);
            for(int h = 1; h <= 54; h++)
            {
                do
                {
                    transfer = generator.nextInt(6) + 1;
                    switch(transfer)
                    {
                        case 1:
                            numy++;
                        case 2:
                            numb++;
                        case 3:
                            numo++;
                        case 4:
                            numg++;
                        case 5:
                            numr++;
                        case 6:
                            numw++;
                        default:
                    }
                    if(numy > 9 || numb > 9 || numo > 9 || numg > 9 || numr > 9 || numw > 9)
                    {
                        rightAmount = false;
                        switch(transfer)
                        {
                            case 1:
                                numy--;
                            case 2:
                                numb--;
                            case 3:
                                numo--;
                            case 4:
                                numg--;
                            case 5:
                                numr--;
                            case 6:
                                numw--;
                            default:
                        }
                    }
                    else
                    {
                        sideValues[h] = transfer;
                        rightAmount = true;
                    }
                }while(rightAmount == false);
            }
            drawAndButtons.add(new graphics());
            cubeSpace.repaint();
            methodValue = 3;
            numy = 0;
            numb = 0;
            numo = 0;
            numg = 0;
            numr = 0;
            numw = 0;
        }

1 个答案:

答案 0 :(得分:0)

假设您以n(numy,numb,numo ...)开头的变量之一大于9,但其switch中的案例索引小于当前transfer。因此,您不会减少它,并且do-while循环不会结束。这可能会导致非常长的循环(如果您的传输恰好大于大于9的值的大小写索引)。请注意,如果你的n-starting-variables初始化为0,就不会发生这种情况,例如,如果你将它们中的任何一个增加到大于9,那么你的第二个开关会将它减少。 但是你的n-starting-variables如何在方法之前初始化?(通过n-starting-variables我的意思是numy,numb,numo ......)

更重要的是,由于你没有在你的情况下使用break,如果你的转移= 1,你将执行所有案例1,2,3,4,5,6和默认,我是不确定这是否是你想要做的。据我所知,你想增加由伪随机数transfer指定的单色作品的“数量”。为此,您必须在此处的break;个代码中添加case,因此只会执行大约= transfer的情况。