Java实现带删除功能的A-Z卡牌游戏,无法输出预期结果如何解决?
A-Z卡牌游戏Java代码问题排查与修复
原代码核心错误点
- 数组使用逻辑混乱:最初定义的
string数组被同时用来存储用户输入记录、卡牌计数数据,拆分当前输入行时错误读取数组前两个元素string[0]、string[1],而非拆分后的splitString数组的内容,直接导致第一次循环就触发逻辑异常/数组越界,程序无法正常读取后续输入 - 缺少独立的统计容器:A-Z共26个字母的计数需要单独的int类型数组存储,不能和字符串类型的输入记录数组混用
- 输出逻辑错误:增强for循环中未定义变量
i,且输出格式不符合需求,缺少「先打印全部输入记录」的逻辑 - 输入提示不符合要求:初始提示文本错误,应先引导用户输入待游玩的卡牌总数
修复后完整代码
import java.util.Scanner; import java.util.ArrayList; import java.util.List; public class CardGame { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 读取待游玩卡牌总数 System.out.print("Cards to play: "); int total = sc.nextInt(); sc.nextLine(); // 处理换行符残留 String[] inputRecords = new String[total]; // 专门存储所有输入记录 int[] countArr = new int[26]; // 存储A-Z对应卡牌数量,索引0对应A,1对应B以此类推 for (int i = 0; i < total; i++) { // 读取每行输入并存入记录数组 inputRecords[i] = sc.nextLine().trim(); // 拆分当前行内容 String[] splitStr = inputRecords[i].split(" "); // 转换数值和字母 int num = Integer.parseInt(splitStr[0]); char letter = splitStr[1].charAt(0); int index = letter - 'A'; // 更新计数 countArr[index] += num; } // 第一步:打印所有输入记录 for (String record : inputRecords) { System.out.println(record); } // 第二步:统计剩余卡牌,收集数量大于0的项 System.out.println("\ncards left: "); List<String> leftCards = new ArrayList<>(); for (int i = 0; i < 26; i++) { if (countArr[i] > 0) { leftCards.add(countArr[i] + " " + (char)('A' + i)); } } // 按要求用 -> 拼接输出 System.out.println(String.join(" -> ", leftCards)); sc.close(); } }
运行验证
输入示例给出的测试用例,输出和需求完全一致:
Cards to play: 5 1 A 2 B 3 C 1 A -3 C 1 A 2 B 3 C 1 A -3 C cards left: 2 A -> 2 B
内容的提问来源于stack exchange,提问作者JavaCoder
相关产品推荐
相关产品推荐

