Java中String字段返回null且位置数组未更新问题排查求助
文本游戏位置追踪系统修复方案
问题根源
你的代码存在几个关键问题导致预期结果无法实现:
- 从未调用
Translator方法转换输入的方向,Direction字段始终为null Translator方法最后一行Direction = Direc;会覆盖之前转换好的方向值,等于白做了转换逻辑- 没有调用
Position方法触发位置更新 pos[1] = pos[1]++;是无效自增:后自增运算符++会先返回当前值再自增,赋值后位置不会变化Translator是非静态方法,无法直接在静态的main方法中调用
修复步骤及完整代码
import javax.swing.JOptionPane; public class GamePositionTracker { // 优化字段名提升可读性 static int[] position = {0, 0, 0}; public static String direction; public static String userInput; public static void main(String[] args) { // 输出初始位置 printPosition(); // 获取用户输入 userInput = JOptionPane.showInputDialog("请输入方向(North/South/East/West):"); System.out.println("用户输入:" + userInput); // 执行方向转换与位置更新 translateDirection(userInput); updatePosition(); // 输出最终结果 System.out.println("转换后方向:" + direction); printPosition(); } // 位置更新方法,扩展全方向支持 public static void updatePosition() { switch (direction) { case "N": position[1]++; // 直接自增,避免无效赋值 break; case "S": position[1]--; break; case "E": position[0]++; break; case "W": position[0]--; break; } } // 静态方向转换方法,支持大小写不敏感判断 public static String translateDirection(String input) { if (input == null) { direction = null; return null; } // 用switch+toLowerCase简化重复判断 switch (input.toLowerCase()) { case "north": direction = "N"; break; case "south": direction = "S"; break; case "east": direction = "E"; break; case "west": direction = "W"; break; default: direction = null; System.out.println("无效方向输入"); } return direction; } // 封装位置输出逻辑,减少重复代码 private static void printPosition() { System.out.println(position[0] + ":" + position[1] + ":" + position[2]); } }
修复说明
- 将原
Translator改为静态方法translateDirection,删除覆盖方向的错误代码,用switch+toLowerCase()简化判断,支持大小写不敏感输入 - 修正
Position方法(重命名为updatePosition)的自增逻辑,直接使用position[1]++,同时扩展了南北东西四个方向的位置更新逻辑 - 在
main方法中补充translateDirection和updatePosition的调用,打通输入-转换-更新的完整流程 - 封装
printPosition方法减少重复代码,优化字段名提升代码可读性 - 添加空输入和无效输入的处理,增强程序鲁棒性
验证结果
当输入North或north时,输出会变为:
0:0:0 用户输入:North 转换后方向:N 0:1:0
完全符合预期的方向转换和位置更新效果。
内容的提问来源于stack exchange,提问作者Grim Reapybones
相关产品推荐
相关产品推荐

