如何重写冗余Java纸牌游戏程序 修复嵌套for循环逻辑错误
问题原因
- 循环逻辑错误:内层k循环会对同一个
card[0][i]位置重复赋值8次,最终仅保留最后一次赋值的S9 - 语法错误:
short是Java关键字,不能用作方法名称- 字符串常量
SA未加双引号 - 方法定义写在了
main函数内部,不符合Java语法规范 - 方法形参类型错误,传入的是二维字符串数组,形参却定义为一维int数组
- 非静态全局变量
ans无法在静态方法中直接调用
正确简化实现
直接预定义花色、牌面值序列,通过双层循环一一对应赋值即可,无需手动逐一写赋值语句,打印逻辑也可通过循环简化,完整可运行代码如下:
public class CardGameArray { public static void main(String[] args) { String[][] card = new String[4][13]; // 预定义花色标识、牌面值、花色打印名称 char[] suitMark = {'S', 'H', 'D', 'C'}; String[] rankValue = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"}; String[] suitName = {"Spades", "Hearts", "Diamonds", "Clubs"}; // 初始化所有牌面 for (int i = 0; i < 4; i++) { for (int j = 0; j < 13; j++) { card[i][j] = suitMark[i] + rankValue[j]; } } // 打印输出 for (int i = 0; i < 4; i++) { System.out.println(suitName[i]); for (int j = 0; j < 13; j++) { System.out.print(card[i][j] + "\t"); } System.out.println(); } } }
上述代码运行输出与原手动赋值版本完全一致。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

