java - 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();
}
}
} }
解决方案
我如何以与 array1 相同的方式打印它,但使用 T 或 F 的布尔值?
对于您的问题,您在代码中做得正确。您的代码不起作用,因为您几乎没有其他问题:
在第二个循环中,即使 false(dead),您也会覆盖 array2 值。你让他活着(设置为真)
if (totalavGrannar<15) { trueorFalse2 = true; array2[row][col] = trueorFalse2; }
此外,您将位置与所有邻居相加(总共 9 个单元格,而不是只有 8 个邻居)
--> 在解决方案中,我设置条件以排除职位本身。
另一个问题是,当您对邻居求和时,您检查相等性为 15 以获取更新 (T/F)。这是浪费。--> 您需要对所有内容求和,然后才更新值(T/F)。
在第二个循环中,您将循环条件重置为“1”,这样您就有了无限循环。--> 我删除了那些行。
你忘了重置 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(); } }
} }
推荐阅读
- r - r: as.date 函数返回 NA
- javascript - 我该如何解决这个代码?没有错误可能是错误代码 - javascript (array,numbers,max,min)
- javascript - 按下回车键时未提交Vue.js表单
- aws-lambda - 访问 AWS 本机 npms 失败
- kotlin - 分离构建的 jar 和依赖 jar
- xamarin.forms - 具有自定义视图的自定义更多选项卡
- python - 简单的热图,其中 2 个 1D 列作为 x 和 y 轴,1 个 1D 列作为 z 轴
- r - 如何重塑具有三行标题的excel表以整理数据格式?
- reactjs - 如何使用 AsyncSelect 设置“react-select”以正确处理服务器端数据?
- reactjs - 如何在 React 的脚本标签中动态插入和运行代码