我正在为我的科学博览会项目制作一个魔方的模拟器,我遇到了一些麻烦。此代码应该通过在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;
}
答案 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
的情况。