JavaFX猜单词游戏:如何将数组字符串替换为指定特殊字符
JavaFX 猜单词(Hangman)游戏字符串替换解决方案
需求说明
使用JavaFX开发猜单词游戏,点击「开始游戏」按钮时从字符串数组随机选取单词,需将显示内容替换为:
- TextField:以
<em>开头,后续跟与单词长度一致的*(例:"School"显示为<em>*****) - Label:显示带空格的下划线(例:"School"显示为
_ _ _ _ _ _)
现有代码
// 字符串数组中的单词列表 String[] listWords = {"Tuesday", "School", "Dog", "Vehicle", "Bird", "Book", "Recipe", "Sun", "Hammer", "Orange"}; // 循环代码 for (int i = 0; i < listWords.length; i++) { String randomWords = listWords[(int)(Math.random() * listWords.length)]; TxtField.setText(randomWords); wordLabel.setText(randomWords); }
解决方案
- 保存当前真实单词:在控制器类中添加成员变量存储选中的真实单词,后续猜字母验证等游戏逻辑会用到:
private String currentWord;
- 简化随机单词选择逻辑:原循环会重复选多次单词,最终只保留最后一次结果,点击「开始游戏」仅需选一次,去掉冗余循环:
// 随机选中一个单词 currentWord = listWords[(int)(Math.random() * listWords.length)];
- 生成TextField显示内容:
Java 11+可直接用String.repeat()快速生成对应长度的*,拼接<em>前缀:
String textFieldDisplay = "<em>" + "*".repeat(currentWord.length()); TxtField.setText(textFieldDisplay);
Java 11以下版本用StringBuilder构建:
StringBuilder sb = new StringBuilder("<em>"); for (int i = 0; i < currentWord.length(); i++) { sb.append("*"); } TxtField.setText(sb.toString());
- 生成Label显示内容:
用String.join()结合Collections.nCopies()快速生成带空格的下划线字符串:
import java.util.Collections; String labelDisplay = String.join(" ", Collections.nCopies(currentWord.length(), "_")); wordLabel.setText(labelDisplay);
或者用StringBuilder手动拼接:
StringBuilder sb = new StringBuilder(); for (int i = 0; i < currentWord.length(); i++) { sb.append("_"); if (i != currentWord.length() - 1) { sb.append(" "); } } wordLabel.setText(sb.toString());
完整修改后的控制器代码片段
import java.util.Collections; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class HangmanController { @FXML private TextField TxtField; @FXML private Label wordLabel; private String currentWord; private String[] listWords = {"Tuesday", "School", "Dog", "Vehicle", "Bird", "Book", "Recipe", "Sun", "Hammer", "Orange"}; @FXML private void startGame() { // 随机选中单词 currentWord = listWords[(int)(Math.random() * listWords.length)]; // 设置TextField显示内容 String textFieldDisplay = "<em>" + "*".repeat(currentWord.length()); TxtField.setText(textFieldDisplay); // 设置Label显示内容 String labelDisplay = String.join(" ", Collections.nCopies(currentWord.length(), "_")); wordLabel.setText(labelDisplay); } }
内容的提问来源于stack exchange,提问作者Pektra Mom
相关产品推荐
相关产品推荐

