Java控制台开发Hangman游戏如何按单词格式打印数组内容
Hangman猜词游戏占位符打印格式问题
问题场景
开发控制台版Hangman(刽子手)猜词游戏时,需要先打印下划线占位符,用户猜对字符后将对应位置的下划线替换为正确字符。
实现逻辑使用两个字符串数组:
- 数组
underDashWord全部填充下划线,作为显示用的占位符数组 - 数组
wordByLettersArray按单个字符拆分,存储待猜单词的每一位
初始化代码:
Arrays.fill(underDashWord, "_"); for (int i = 0; i < wordChosen.length(); i++) { wordByLettersArray[i] = String.valueOf(wordChosen.charAt(i)); }
选择String类型而非char类型存储单个字符,是为了后续直接调用.equals方法做值比对,字符匹配替换逻辑:
for (int i = 0; i < underDashWord.length; i++) { if (wordByLettersArray[i].equals(userGuess)){ underDashWord[i] = wordByLettersArray[i]; } }
上述替换逻辑本身可以准确定位猜对的字符位置,比如待猜单词为milk、用户猜对i时,预期输出效果为_ i _ _。但当前使用System.out.println(Arrays.toString(underDashWord));打印,实际输出为[ _, i, _ , _ ],带有多余的方括号和逗号,不符合展示需求。
原因说明
Arrays.toString()是Java提供的数组调试工具方法,默认实现就会用方括号包裹所有数组元素,元素之间用逗号分隔,这个格式是为了方便开发时快速查看数组内容,并不适合面向用户的业务展示场景。
解决方法
不需要修改原有替换逻辑,只需要替换打印时的拼接逻辑即可,两种常用实现:
方法1:遍历拼接(兼容所有JDK版本)
遍历数组元素手动拼接,元素之间用空格分隔,使用StringBuilder提升拼接效率:
StringBuilder displayContent = new StringBuilder(); for (int i = 0; i < underDashWord.length; i++) { displayContent.append(underDashWord[i]); // 非最后一个元素时,元素后拼接空格 if (i != underDashWord.length - 1) { displayContent.append(" "); } } System.out.println(displayContent);
方法2:使用String.join(JDK 8及以上版本可用,代码更简洁)
JDK 8新增的String.join方法支持指定分隔符直接拼接字符串数组,不需要手动写遍历逻辑:
String displayContent = String.join(" ", underDashWord); System.out.println(displayContent);
两种方法输出效果完全一致,猜对i时都会输出预期的_ i _ _格式,可根据项目使用的JDK版本选择。
内容的提问来源于stack exchange,提问作者Ziolekx
相关产品推荐
相关产品推荐

