如何计算2d布尔数组中的trues和falses的数量?

时间:2013-11-04 01:51:32

标签: java arrays boolean double

我有一个布尔数组设置,我需要找出它存储了多少真实和谬误...

    boolean[][] SignalMap = new boolean[Size][Size];

我将如何做到这一点?

    for(int i = 0; i < Size; i++)
{
    int counter = 0;
            if(SignalMap = true)
            counter++;
    {
    System.out.println("true: " + counter)
    System.out.println("flase: " + (Size - counter));

4 个答案:

答案 0 :(得分:3)

想要查看单行解决方案吗?

int trueCount = Arrays.deepToString(SignalMap).replaceAll("[^t]", "").length();

错误的计数当然是赞美:

int falseCount = Size * Size - trueCount;

答案 1 :(得分:1)

解释

首先,您在counter的每次迭代中初始化for loop等于0,每次都会重置它。那不是你想要的;在顶部执行一次(之前 for loop)。

其次,你需要有一个嵌套的 for loop来遍历每一行中的每一列,然后计算那样的“真实”数量。

第三,您的比较声明if(SignalMap = true)不正确,因为:

  1. 您正在处理2D数组,因此您需要在矩阵中指定位置。因此SignalMap必须是SignalMap[rowPosition][columnPosition]
  2. SignalMap = true将其设置为true,这是您无法做到的。您想比较它以查看 true,因此您应该写SignalMap == true
  3. 最后,存储的错误booleans的数量将是从行大小中减去true booleans的数量乘以列大小。这是因为列数为rowSize,每列中都有colSize booleans。因此,将它们相乘以得到2D数组中布尔值的总数。

    <强> _ __ _ __ _ __ _ __ _ 的__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ < / EM> __ _ __ _ __ _ __ _ __ _ ___ < /强>

    代码

    boolean[][] SignalMap = new boolean[rowSize][colSize];
    int counter = 0; // initialize before the for loops
    
    for(int r = 0; r < rowSize; r++) { // loop for rows
       for (int c = 0; c < colSize; c++) { // nested loop for columns
          if (SignalMap[r][c]) // if array boolean at r and c position is true...
              counter++; // add one to the counter
       }
    }
    
    System.out.println("true: " + counter)
    System.out.println("false: " + (rowSize * colSize - counter));
    // total number of booleans in array is rowSize * colSize
    // and total # of false booleans is total # of booleans - # of true booleans
    

答案 2 :(得分:0)

if(SignalMap[i] == true) // this is for a regular array

这可能是您想要的2D阵列

 for(int i = 0; i < Size; i++) {
      for(int j = 0; j < Size; j++) {
          if(SignalMap[i][j])  // will result to true if SignalMap[i][j] is in fact true
              counter++;
      }
 }

答案 3 :(得分:0)

由于这是Java,因此您的变量应该是小写的。

boolean[][] signalMap = new boolean[size][size];

对于数组的每个维度,您需要一个for循环。

这是编写double for循环的一种方法。计数器需要在for循环之外初始化。

        int counter = 0;
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                if (signalMap[i][j]) {
                    counter++;
                }
            }
        }
        System.out.println("true: " + counter);
        System.out.println("false: " + (size * size - counter));