首页 > 解决方案 > java中的布尔棋盘游戏

问题描述

程序应打印出 array1 中的给定值,并将第二个数组打印为真或假。

Array1 代表一个棋盘游戏,其中角色可以站在不同的位置。整数表示站在每个位置的危险程度。

如果角色发现自己处于 int 3,则将其宣布为死亡。如果将每个邻居的值(不包括当前位置)相加,并且总值等于或大于 15,也将被宣布死亡。

死=假(F)活着=真(T)

因此,如果当前位置是 2 或 1,并且每个邻居的总值小于 15,则角色活着。数组边缘缺失的邻居将被计为 0。

我如何以与 array1 相同的方式打印它,但使用 T 或 F 的布尔值?

totalavGrannar 是应该添加所有邻居总值的变量。

到目前为止我的代码:

     import java.util.Arrays;
     public class uppg10{
      public static void main(String[] args){


      int [][] array1 = {{1,1,2,3,3},
                         {2,1,1,2,3},
                         {3,2,2,1,2},
                         {3,3,3,3,3}};

      boolean [][] array2 = new boolean [4][5];

      int rows = array1.length;
      int cols = array1[0].length;

      int totalavGrannar = 0;

      array2 = new boolean[rows][cols];

      for (int row=0; row<rows; row++) {
       for (int col=0; col<cols; col++) {

       System.out.print(String.format("%4d", array1[row][col]));

        if ( ( (col+1) % cols ==0) && (col > 0))

        System.out.println();
       }
      }

      for (int row=0; row<rows; row++) {
       for (int col=0; col<cols; col++) {

       boolean trueorFalse;

       if (array1[row][col]<3) {
        trueorFalse = true;
        array2[row][col] = trueorFalse;
       }
       else{
         trueorFalse = false;
       }

       row = 1;
       col = 1;

       for(int offsetRow=row-1; offsetRow<=row+1; offsetRow++){
        for(int offsetCol=col-1; offsetCol<=col+1; offsetCol++){

           totalavGrannar += array1[offsetRow][offsetCol];

           boolean trueorFalse2;

           if (totalavGrannar<15) {
             trueorFalse2 = true;
             array2[row][col] = trueorFalse2;
           }

           else{
             trueorFalse2 = false;

           }

         }
        }

       }
      }

      for (int row=0; row<array2.length; row++) {
       for (int col=0; col<array2[row].length; col++) {

       System.out.print(String.format("%8s" , array2[row][col] ? "T" : "F"));

       if ( ( (col+1) % cols ==0) && (col > 0))

       System.out.println();

       }
      }

} }

标签: javaarraysfor-loopbooleanoperators

解决方案


我如何以与 array1 相同的方式打印它,但使用 T 或 F 的布尔值?

对于您的问题,您在代码中做得正确。您的代码不起作用,因为您几乎没有其他问题:

  1. 在第二个循环中,即使 false(dead),您也会覆盖 array2 值。你让他活着(设置为真)

    if (totalavGrannar<15) {
        trueorFalse2 = true;
        array2[row][col] = trueorFalse2;
    }
    

    此外,您将位置与所有邻居相加(总共 9 个单元格,而不是只有 8 个邻居)

--> 在解决方案中,我设置条件以排除职位本身。

  1. 另一个问题是,当您对邻居求和时,您检查相等性为 15 以获取更新 (T/F)。这是浪费。--> 您需要对所有内容求和,然后才更新值(T/F)。

  2. 在第二个循环中,您将循环条件重置为“1”,这样您就有了无限循环。--> 我删除了那些行。

  3. 你忘了重置 totalavGrannar 我建议的一个简短修复:(我还删除了一些多余的行)

      import java.util.Arrays;
    
      public class uppg10 {
      public static void main(String[] args) {
     int[][] array1 = {{1, 1, 2, 3, 3},
             {2, 1, 1, 2, 3},
             {3, 2, 2, 1, 2},
             {3, 3, 3, 3, 3}};
    
     int rows = array1.length;
     int cols = array1[0].length;
    
     boolean[][] array2 = new boolean[rows][cols];
    
     int totalavGrannar = 0;
     //Print array1
     for (int row = 0; row < rows; row++) {
         for (int col = 0; col < cols; col++) {
             System.out.print(String.format("%4d", array1[row][col]));
             if (((col + 1) % cols == 0) && (col > 0))
                 System.out.println();
         }
     }
    
     for (int row = 0; row < rows; row++) {
         for (int col = 0; col < cols; col++) {
    
             if (array1[row][col] < 3)
                 array2[row][col] = true;
             //Iterate neighbors to sum values
             for (int offsetRow = row - 1; offsetRow <= row + 1; offsetRow++) {
                 for (int offsetCol = col - 1; offsetCol <= col + 1; offsetCol++) {
    
                     if (offsetRow >= 0 && offsetCol >= 0)   //0-bounds check
                         /*if (offsetRow < array1.length && offsetCol < array1.length) //edges-bounds check
                             if (offsetRow != row && offsetCol != col) {      //exclude position from sum
                                 totalavGrannar += array1[offsetRow][offsetCol];
                             }*/
                         if (offsetRow < array1.length && offsetCol < array1[0].length) //edges-bounds check
                             if (offsetRow != row || offsetCol != col) {      //exclude position from sum
                                 totalavGrannar += array1[offsetRow][offsetCol];
                             }
                 }
             }
             if (totalavGrannar >= 15)
                 array2[row][col] = false;
             totalavGrannar = 0;
         }
     }
     for (int row = 0; row < array2.length; row++) {
         for (int col = 0; col < array2[row].length; col++) {
    
             System.out.print(String.format("%8s", array2[row][col] ? "T" : "F"));
             if (((col + 1) % cols == 0) && (col > 0))
    
                 System.out.println();
    
         }
     }
    

    } }


推荐阅读