繁体   English   中英

Boolean 棋盘游戏 java

[英]Boolean board game in java

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

Array1 表示角色可以站在不同位置的棋盘游戏。 整数表示每 position 站一次有多危险。

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

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

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

我如何以与 array1 相同的方式打印它,但使用 boolean 的 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();

       }
      }

} }

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

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

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

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

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

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

  1. 另一个问题是,当您对邻居求和时,每次添加更新 (T/F) 检查是否等于 15。 这是浪费。 --> 您需要对所有内容求和,然后才更新值 (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(); } }

    } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM