有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing为什么要冻结我的java程序?

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

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) 个答案

  1. # 1 楼答案

    假设一个以n开头的变量(numy,numb,numo…)大于9,但它在switch中的大小写索引小于当前的transfer。因此,您不会减少它,do while循环也不会结束。这可能会导致很长的循环(如果您的传输恰好大于大于9的值的大小写索引)。注意,如果n个起始变量被初始化为0,那么这种情况就永远不会发生,例如,如果你将其中任何一个变量的值增加到大于9,那么你的第二个开关就会将其减回来但是在使用该方法之前,您的n个起始变量是如何初始化的(我所说的n开始变量是指numy、numb、numo…)

    更重要的是,由于在您的案例中没有使用break,如果您的transfer=1,您将执行所有案例1、2、3、4、5、6和default,我不确定这是否是您想要在这里执行的。据我所知,你想增加单色片段的“数量”,由伪随机数transfer指定。要做到这一点,您必须在这里的每段代码中添加break;,这样只会执行case=transfer