java - 我如何让这个板像我想要的那样打印出来
问题描述
完全是java的菜鸟,我有一个家庭作业,我需要制作一个自定义国际象棋游戏,但我什至在打印游戏板时遇到了困难,我正在尝试将所有空白空间与“X”一起使用。我当前的“代码”:
public class Chess {
public static void main(String[] args) {
String[][] board = new String[7][7];
fillBoard(board);
}
public static void fillBoard(String[][] board){
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
board[i][j] = "X";
System.out.print(Arrays.deepToString(board));
}
System.out.println();
}
}
}
它打印出来: 这个
当我希望它打印出来时: 这是
解决方案
阅读您的评论后,我意识到这不仅仅是打印您关心的数组;相反,您担心以后如何访问它。注释中已经提供了打印不正确问题的解决方案,即替换System.out.print(Arrays.deepToString(board));
为System.out.print("X");
. 我在这里解释另一部分(即以后如何访问它)以及一些有助于您设计应用程序的附加信息。
- 当您在某些方法中传递和更改数组时,调用方法的数组也将更改(检查此以了解更多信息)。意思是什么时候
board[][]
换进去fillBoard
,你就会得到换board[][]
进去的main
。 - 根据单一职责原则,模块/方法
fillBoard
应该只做一件事,那就是填满板子。它也不应该做打印(额外的事情)。您应该编写不同的打印方法。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[][] board = new String[7][7];
fillBoard(board);
displayBoard(board);
}
static void fillBoard(String[][] board) {
for (String[] row : board) {
Arrays.fill(row, "X");
}
}
static void displayBoard(String[][] board) {
for (String[] row : board) {
for (String cell : row) {
System.out.print(cell);
}
System.out.println();
}
}
}
输出:
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
附加说明:
二维数组是一维数组的数组,因此您可以通过多种方式编写上面给出的代码,例如
static void fillBoard(String[][] board) {
for (int i = 0; i < board.length; i++) {
Arrays.fill(board[i], "X");
}
}
或使用增强for
循环:
static void fillBoard(String[][] board) {
for (String[] row : board) {
Arrays.fill(row, "X");
}
}
或不使用Arrays.fill
:
static void fillBoard(String[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
board[i][j] = "X";
}
}
}
类似地,方法,displayBoard
可以写成:
static void displayBoard(String[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
System.out.print(board[i][j]);
}
System.out.println();
}
}
请注意,我使用board.length
andboard[i].length
而不是7
行7
数和列数,以确保每次更改数组大小时都不必更改它。
推荐阅读
- docker - Kubernetes 中工作节点上的连接被拒绝错误
- rest - 如何将自己的 api 用于其他平台?
- ffmpeg - 如何使用 FFmpeg 将 MJPG 网络摄像头转发到虚拟视频设备?
- javascript - 我尝试运行命令“npm run start”,但在 react js 中出现了这个错误
- flutter - Flutter/Dart:多次重用小部件并返回 setState 值
- c++ - C++ clock() 函数 time.h 返回不稳定的值
- pytorch - Torchtext 0.7 显示字段已被弃用。什么是替代方案?
- java - Infinispan 等效于 IMap.values(Predicate)
- variables - 如何使用 IO 和 GTK 更新 main 中的“变量”
- reactjs - 为什么我在另一个组件中更改了状态后该功能不起作用?