swing为什么要冻结我的java程序?
我正在为我的科学展项目制作一个魔方模拟器,我遇到了一些麻烦。这段代码应该通过在sideValues[]
数组中设置不同的颜色值来随机化多维数据集。这并不复杂,但它总是冻结我的电脑。(顺便说一下,method1
、method2
和method 3
是JLabels
,计数器整数是为了确保每种颜色不超过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 楼答案
假设一个以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