从ArrayList随机选12个单词并添加至WordSearch类的二维数组棋盘
解决思路与修正代码
先梳理下当前代码的问题,直接上修正后的版本:
- 输入处理漏洞:现在只是打印提示,但没把超过12的
maxWords修正为12,用户输入15的话循环会跑15次,肯定出问题。 - 重复选取问题:当前随机索引的方式会重复选到同一个单词,得避免这种情况。
- 缺失棋盘添加逻辑:选完单词后没把它们传到
WordSearch的棋盘里,这是核心缺失的部分。
修正后的完整代码
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.Scanner; public class YourClassName { // 替换成你的实际类名 public static void readWords() { WordSearch search = new WordSearch(); List<Word> poolWords = new ArrayList<>(); String[] wordsArray = {"play", "dream", "personal", "advice", "steal", "suspicious", "borrow", "image", "repeat", "enemy", "break", "selfish", "protester", "charity", "encounter", "discreetly", "effectively", "react", "respect", "depression", "couch", "counsellor", "snatch", "judge", "appearance", "quiet", "ridiculous", "overjoyed", "antidote", "parademic", "employment", "balance", "overwhelm", "relax", "flextime", "task", "daily", "realistic", "essential", "stressful", "fixed", "key", "reward", "salary", "loan", "promotion", "value", "database", "schedule", "priority"}; for(String word : wordsArray) { poolWords.add(new Word(word)); } Scanner input = new Scanner(System.in); System.out.println("How many words? max 12: "); int maxWords = input.nextInt(); // 修正输入限制,超过12直接设为12,小于1设为1 if(maxWords > 12) { System.out.println("只能生成最多12个单词,已自动调整为12"); maxWords = 12; } else if(maxWords < 1) { System.out.println("至少选1个单词,已自动调整为1"); maxWords = 1; } // 洗牌法避免重复选取,比随机删除更高效 Collections.shuffle(poolWords); List<Word> selectedWords = poolWords.subList(0, maxWords); // 将选中的单词添加到WordSearch的棋盘 for(Word word : selectedWords) { search.addWordToBoard(word); } input.close(); // 测试用:打印棋盘 search.printBoard(); } } // 假设你的Word类结构 class Word { private String word; public Word(String word) { this.word = word; } public String getWord() { return word; } } // WordSearch类补充棋盘逻辑 class WordSearch { private char[][] board; public WordSearch() { // 初始化20x20的空白棋盘,可按需调整 this.board = new char[20][20]; for(int i=0; i<board.length; i++) { for(int j=0; j<board[i].length; j++) { board[i][j] = ' '; } } } public void addWordToBoard(Word word) { String wordStr = word.getWord(); Random rand = new Random(); // 简单实现横向放置(需完善冲突检测、方向随机等逻辑) int row = rand.nextInt(board.length); int col = rand.nextInt(board[0].length - wordStr.length() + 1); for(int i=0; i<wordStr.length(); i++) { board[row][col + i] = wordStr.charAt(i); } } // 打印棋盘的测试方法 public void printBoard() { for(char[] row : board) { for(char c : row) { System.out.print(c + " "); } System.out.println(); } } }
关键改动说明
- 输入边界处理:完善了超过12和小于1的输入修正,避免无效循环。
- 洗牌法选单词:用
Collections.shuffle打乱列表后取前N个,彻底避免重复选取,逻辑更简洁高效。 - 棋盘添加逻辑:给
WordSearch类补充了基础的棋盘初始化和单词放置方法,你可以根据需求完善放置逻辑(比如随机方向、冲突检测),核心就是把选中的Word对象传入WordSearch类处理。
内容的提问来源于stack exchange,提问作者user13084927
相关产品推荐
相关产品推荐

