Java中如何将用户输入匹配到二维数组同名Champion对象并实现选择移动
当然可以通过遍历二维数组来实现这个需求!这其实是处理网格型角色选择非常直观的一种方式,我来给你拆解下具体怎么做:
实现思路与步骤
核心逻辑就是通过遍历网格,把所有非null的Champion对象筛选出来,再提供给用户选择——毕竟用户只能操作实际存在的角色嘛。
1. 遍历数组收集可选择的角色
你可以用嵌套循环遍历整个10×10的网格:外层循环处理行(对应y坐标),内层循环处理列(对应x坐标),每次遇到非null的Champion,就把它加入候选列表,同时可以把角色信息展示给用户参考。
举个Java示例(你可以根据自己使用的语言调整):
List<Champion> selectableChamps = new ArrayList<>(); Champion[][] grid = new Champion[10][10]; // 你的二维网格数组 // 嵌套遍历整个网格 for (int y = 0; y < grid.length; y++) { for (int x = 0; x < grid[y].length; x++) { Champion currentChamp = grid[y][x]; if (currentChamp != null) { selectableChamps.add(currentChamp); // 打印角色选项,让用户清楚看到可选角色和位置 System.out.printf("选项%d:%s(位置:x=%d, y=%d)%n", selectableChamps.size(), currentChamp.name, currentChamp.x, currentChamp.y); } } }
2. 处理用户选择并获取目标角色
收集完候选列表后,就可以引导用户输入选项编号,再从列表中取出对应的Champion对象。记得要做简单的合法性校验,避免用户输入无效值。
示例代码片段:
Scanner scanner = new Scanner(System.in); System.out.print("请输入你要移动的角色编号:"); int userChoice = scanner.nextInt(); // 校验输入是否合法 if (userChoice < 1 || userChoice > selectableChamps.size()) { System.out.println("无效的选择,请重新输入!"); // 这里可以加循环逻辑,让用户重新输入直到合法 } else { Champion selectedChamp = selectableChamps.get(userChoice - 1); // 列表是0索引,要减1 System.out.printf("你已选择要移动的角色:%s%n", selectedChamp.name); // 接下来就可以编写这个角色的移动逻辑了 }
额外优化小建议
- 因为你的网格只有10×10,遍历的性能完全不用顾虑;如果是超大网格,再考虑优化存储方式(比如单独维护一个角色列表,不用每次遍历)。
- 可以给Champion加一个唯一ID,避免出现重名角色时用户混淆。
- 遍历展示时按行顺序输出,用户更容易对应网格上的实际位置。
内容的提问来源于stack exchange,提问作者Timmyctc
相关产品推荐
相关产品推荐

