如何检查2 * 2数组的所有元素是否都为真?

时间:2014-02-02 02:05:47

标签: java arrays

我正在创建一个4x4 2D阵列。我需要收到通知,或者在所有元素都变为true时获取值。这是“如果the2DArray [] =真{blah blah}”这么简单吗?

谢谢! 附:我还没有编写代码。我问这个问题有助于制定程序的逻辑。

3 个答案:

答案 0 :(得分:3)

对于2D数组,您必须手动遍历数组中的所有元素以检查一个值是否为false。

这方面的一个例子是:

public boolean checkArr(boolean[][] arr) {
    for(int i = 0; i < arr.length; i++) {
        for(int j = 0; j < arr[i].length; j++) {
            if(!arr[i][j]) 
                return false;
        }
    }
    return true;
}

答案 1 :(得分:0)

如果您希望在所有元素都为真的情况下采取行动,则必须检查每个元素。

boolean flag=true;
 for(i=0;i<4;i++) {
   for(j=0;j<4;j++) {
       if(array[i][j] == 'false')
          flag=false;
          return;
    }
  }
if(flag == true)
  // your action

答案 2 :(得分:0)

当所有数组元素都为真时,可以用来通知的一种方法是将数组元素包装在自己的对象中,该对象触发on / off事件,并将整个数组包装在触发allOn事件的对象中。像这样的东西(代码是c#,但希望你可以遵循):

public class Element
{
    public event Action TurnedOn = delegate { };
    public event Action TurnedOff = delegate { };

    private bool state;

    public void TurnOn()
    {
        state = true;
        TurnedOn();
    }

    public void TurnOff()
    {
        state = false;
        TrunedOff();
    }
}

public class My2DArray
{
    public event Action AllTurnedOn = delegate { };

    private readonly Element[,] array;
    private int numberOfElementsThatHaveBeenTurnedOn;


    public My2DArray(Element[,] array)
    {
        this.array = array;

        foreach (Element element in array)
        {
            element.TurnedOn += OnElementTurnedOn;
            element.TurnedOff += OnElementTurnedOff;
        }
    }

    private void OnElementTurnedOn()
    {
        numberOfElementsThatHaveBeenTurnedOn++;

        int amountOfElements = GetAmountOfElementsInArray();
        bool allElementsAreOn = numberOfElementsThatHaveBeenTurnedOn == amountOfElements;
        if (allElementsareOn)
        {
            AllTurnedOn();
        }
    }

    private void OnElementTurnedOff()
    {
        numberOfElementsThatHaveBeenTurnedOn--;
    }
}

如果所有元素都已打开,则计算的逻辑假设所有元素都以false开头。