我做了一个从tin(char [] bean)中取出“beans”的方法。 “豆”只是绿色或蓝色,这种方法是取出2豆。如果它们都是绿色或蓝色,则将1个蓝色“豆”放回去,否则将绿色的豆放回去。重复,直到只剩下1个“豆”。但是有时候还剩1个,甚至3个或4个。我似乎无法找到解决方案。代码有点像这样
public static void takeTwo(int size, char [] beans){
int b1, b2;
int count = size;
while (count >= 2){
int r1 = (int)(Math.random()*size) ;
int r2 = (int)(Math.random()*size) ;
b1 = beans[r1];
b2 = beans[r2];
beans [r1] = Empty;
beans [r2] = Empty;
if (b1 == Green && b2 == Green || b1 == Blue && b2 == Blue){
int j = (int)(Math.random() *2);
if (j == 1)
b1 = Blue;
else
b2 = Blue;
}
else if (b1 == Green && b2 == Blue){
b1 = Green;
}
else if (b1 == Blue && b2 == Green){
b2 = Green;
}
count = count-1;
}
}
答案 0 :(得分:0)
代码中的问题是,当您将选定的bean设置为“Empty”时,if-else梯形图不会决定如何处理它。因此,编辑代码,以便在选择“Empty”时,变量count
不会递减。
例如:
if (b1 == Green && b2 == Green || b1 == Blue && b2 == Blue){
//some code in here
}else if(b1 == Empty || b2 == Empty){
continue; //this will stop the loop from decreasing variable count
}
count = count - 1;
这意味着“空”不会算作选择的bean,因为它已被选中。此外,当你“将豆子放回罐子里”时,你必须将实际的数组值设置为蓝色或绿色。例如,代替第14行的b1 = Blue
,您应该执行以下操作:
beans[r1] = Blue;
这可能是另一个导致问题的错误。
答案 1 :(得分:0)
根据我的理解,我用我的话重复你的问题。
传递名为beans
的字符数组。您还将数组的大小作为变量size
传递。如果数组的大小大于或等于2,则从数组中随机取2个字符值,并将它们存储在2个变量b1
和b2
中。现在,您可以将数组的值设置为EMPTY
或null
。现在当你的b1和b2相同时,你放回BLUE
,否则你放回一个GREEN
。你继续这样做,直到你得到size = 1的数组bean。
如果这是正确的,那么我想向您指出我在您的代码中看到的某些问题。
首先,当您随机选择数组bean中的位置时,可能会导致变量r1和r2相同。换句话说,如果你说size = 2,随机数的产生可能导致r1为1而r2为1.因此,结果是b1和b2具有相同的值。
其次,您没有编写任何代码来丢弃从数组中取出的值。我的意思是你要将数组中的值设置为Empty或我可以对null
说出什么。但阵列中的位置仍然存在。让我举一个例子:假设您的数组bean的大小为10.生成的随机数给出了值1和2.现在在删除bean后,在循环完成之后,在下一次迭代中删除了bean beans[1] = null; beans[2] = null;
循环,随机数生成器可以生成值1和2,这将导致b1和/或b2为空或null
。然后导致这种变量达到预期不会达到的值的情况。
最后,我没有在您的代码中找到任何将选定值放回原始数组bean的行。
所以我建议你解决我在这里说过的问题,然后再尝试新编程。