[英]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 值?
对于您的问题,您在代码中做对了。 您的代码不起作用,因为您几乎没有其他问题:
在第二个循环中,您覆盖 array2 值,即使 false(dead) 也是如此。 你让他活着(设置为真)
if (totalavGrannar<15) { trueorFalse2 = true; array2[row][col] = trueorFalse2; }
此外,您将 position 与所有邻居相加(总共 9 个单元而不是只有 8 个邻居)
--> 在解决方案中,我设置条件以排除 position 本身。
另一个问题是,当您对邻居求和时,每次添加更新 (T/F) 检查是否等于 15。 这是浪费。 --> 您需要对所有内容求和,然后才更新值 (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(); } }
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.