Java查找最后一个bean的颜色

时间:2015-04-11 15:34:29

标签: java

我做了一个从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;
    }
}

2 个答案:

答案 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个变量b1b2中。现在,您可以将数组的值设置为EMPTYnull。现在当你的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的行。

所以我建议你解决我在这里说过的问题,然后再尝试新编程。