3

我正在为Android平台做一个简单的游戏。我有 25 个由我称为 Circle 的类制成的对象。每个 Circle 对象都有一个字段,该字段color包含一个 int 数字,表示

  1. 红色
  2. 蓝色
  3. 白色
  4. 黄色,最后
  5. 为绿色。

所以每种颜色有五个对象。

每个对象还有一个布尔值,我称之为status,并且在开始时将其设置为 false。但是在游戏过程中,一些 Circle 对象status被设置为 true。

所有 25 个对象都存储在ArrayList我称之为listOfCircles.

我的问题是,如何检查所有设置为 true 的 Circle 对象是否具有相同类型的颜色代码?假设三个 Circle 对象被设置为 true,每个对象color都是 3,但也可能是这三个 Circle 对象中的一个的值可能是 1,另外两个是 4,那么它不是有效匹配。

一些帮助会很好!

4

7 回答 7

3

并且要检查一个特定的值是否不止一次,你可以使用这样的东西:

if ( (Collections.frequency(portList, x)) > 1 ){
    System.out.println(x + " is in portList more than once ");
} 
于 2013-05-05T15:57:38.000 回答
2

您可以使用类似这样的方法来查看特定值存在多少次:

System.out.println(Collections.frequency(portList, 1));

// 可以是任何整数,我放 1 以便你理解

于 2013-05-05T15:53:46.597 回答
2

如果arraylist的第一个元素的频率等于arraylist的大小,那么所有项目都相等,否则不相等

    if ((Collections.frequency(list, list.get(0))) == list.size() ){

        System.out.println("string same");
    } 
    else{

        System.out.println("string different");

    }
于 2016-08-12T05:21:24.600 回答
1

它是这样工作的。它遍历圆圈列表并查找第一个具有status = true. 当它找到它时,它将那个圆圈的颜色保存在int color. 在之后的每一步,如果它找到一个活动的圆圈(带有status = true,它会检查该圆圈的颜色是否与原始圆圈匹配。

如果不是,则意味着并非所有活动圆圈都具有相同的颜色。因为flag最初设置为true,所以单个false就足以确定并非所有活动圆圈都具有相同的颜色。

如果没有false找到,这意味着如果所有活动圆圈与第一个活动圆圈的颜色相同,则flag剩余true.

List<Circle> listOfCircles = new ArrayList<Circle>();
boolean flag = true;
int color;
for (Circle currentCircle: listOfCircles) {
    if (currentCircle.status == true) {
        if (color == null) {
            color = currentCircle.color;
        } else {
            if (color != currentCircle.color) {
                flag = false;
            };
        };
    };
};
// flag now holds true or false according to your needs.
于 2013-05-05T15:54:09.973 回答
0

一个简单的 for 循环就足够了,因为您只检查一种颜色:

boolean isValid (ArrayList <Circle> circles) {
    int color = -1;
    for (Circle c : circles) {
        if (c.status) {
            if (color < 0)
                color = c.color;
            if (color != c.color)
                return false;
        }
    }
    return true;
}
于 2013-05-05T15:56:50.510 回答
0

将 isValid 标志设置为 true,将颜色标志设置为 -1。然后遍历数组,如果一个对象设置为 true,则将颜色设置为该数字(确保它只设置一次),然后进入另一个 if 语句。在第二个 if 语句中,如果颜色与设置的数字不匹配,则为 false 并中断。

否则,此循环将以 true 结束,这是一个有效的设置。

于 2013-05-05T15:57:22.233 回答
0
public boolean mymeth(){

    int firstCol = 0; 
    for(int i = 0;listOfObject.length(); i++){
        // determine the color of the first element whose status is set
        if(listOfObject.get(i).status && firstCol == 0){ 
            firstCol = listOfObject.get(i).color; 
       }
       //if that value is not equal to next element who is set then return false; 
        else if(listOfObject.get(i).status && firstCol != 0){
            if(firstCol != listOfObject.get(i).color)
               return false;
        }
    }
    return true;
}
于 2013-05-05T16:04:22.553 回答