【问题标题】:How to check if objects in an array list has the same value?如何检查数组列表中的对象是否具有相同的值?
【发布时间】:2013-05-05 15:50:11
【问题描述】:

我正在为 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,那么它不是有效匹配.

一些帮助会很好!

【问题讨论】:

  • 您可以遍历数组列表并一次比较它们。它只需要一次通过数组。还是您正在寻找不同的解决方案?
  • 没有第一个选项是我正在寻找的。你能用一些简短的代码示例来回答吗?
  • 如果我正确理解您的问题,那么我的方法是使用两个 for 循环,每个循环比较两个索引。

标签: java arraylist


【解决方案1】:

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

if ( (Collections.frequency(portList, x)) > 1 ){
    System.out.println(x + " is in portList more than once ");
} 

【讨论】:

    【解决方案2】:

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

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

    // Integer 可以是什么,我放了1,这样你就明白了

    【讨论】:

      【解决方案3】:

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

          if ((Collections.frequency(list, list.get(0))) == list.size() ){
      
              System.out.println("string same");
          } 
          else{
      
              System.out.println("string different");
      
          }
      

      【讨论】:

        【解决方案4】:

        它是这样工作的。它遍历圈子列表并查找第一个具有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.
        

        【讨论】:

        • 这段代码我看不懂!为什么颜色颜色!?那我需要一门新课吗?
        • 更好! :) 如果只有两个对象设置为 TRUE 或五个对象设置为 TRUE,这是否也有效?
        • 好的,如果flag仍然是TRUE,那么它们都具有相同的颜色代码?
        • 好的!看起来不错!谢谢您的帮助!我稍后会尝试代码!
        • 关于更多的事情!你为什么使用 };这几次?是不是只有 }
        【解决方案5】:

        一个简单的 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;
        }
        

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:
            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;
            }
            

            【讨论】:

              猜你喜欢
              • 2021-12-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-19
              • 1970-01-01
              • 2023-03-26
              • 2020-12-27
              • 2019-06-19
              相关资源
              最近更新 更多