Java游戏棋盘代码精简及打印异常、布局问题咨询
Java游戏棋盘开发解决方案
1. 精简批量赋值代码
你不需要单独定义10个城市字符串变量,也不需要逐个给cities数组赋值,直接用字符串数组批量初始化即可,还可以用字符串格式化自动补全空格,避免手动数空格出错:
// 直接定义所有城市名称 String[] cityNames = { "Cario", "Phuket", "New delhi", "Hanoi", "Paris", "LA", "Sydney", "Tokyo", "Seoul", "START" }; char[][] cities = new char[10][11]; for (int i = 0; i < cityNames.length; i++) { // %-11s代表左对齐,不足11位自动补空格,完全匹配你的格子长度要求 String paddedCity = String.format("%-11s", cityNames[i]); cities[i] = paddedCity.toCharArray(); }
以上代码完全替代了你原来定义10个city变量、逐个赋值的全部逻辑,后续要修改城市名称直接改cityNames数组即可,维护成本更低。
2. 修复报错并输出规整棋盘
报错原因
你原来的代码索引写反了:cities[p][q]里p的取值范围超过了cities数组的长度(cities只有10个元素,索引范围0-9),触发了数组越界异常。同时打印逻辑的循环层级完全错乱,才会输出错位的格子。
修正后完整代码
void showBoard() { // 精简后的城市数据初始化 String[] cityNames = { "Cario", "Phuket", "New delhi", "Hanoi", "Paris", "LA", "Sydney", "Tokyo", "Seoul", "START" }; char[][] cities = new char[10][11]; for (int i = 0; i < cityNames.length; i++) { cities[i] = String.format("%-11s", cityNames[i]).toCharArray(); } // 预定义分隔线:每个格子的分隔线长度为13(| + 11位内容 + |),一行5个格子总长度13*5=65 String separator = "-".repeat(13 * 5); // 打印两行棋盘:第一行放前5个城市,第二行放后5个城市 for (int row = 0; row < 2; row++) { // 打印格子顶部边框 System.out.println(separator); // 打印格子内容 for (int col = 0; col < 5; col++) { int cityIndex = row * 5 + col; System.out.print("|"); System.out.print(cities[cityIndex]); System.out.print("|"); } System.out.println(); // 打印格子底部边框 System.out.println(separator); // 第一行结束后打印上下方向箭头 if (row == 0) { System.out.print("↑"); System.out.print(" ".repeat(separator.length() - 2)); System.out.println("↓"); } } }
运行以上代码即可输出规整的两行五列棋盘,完全匹配你给出的示例图布局要求。
内容的提问来源于stack exchange,提问作者ICIS
相关产品推荐
相关产品推荐

