You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从ArrayList随机选12个单词并添加至WordSearch类的二维数组棋盘

解决思路与修正代码

先梳理下当前代码的问题,直接上修正后的版本:

  1. 输入处理漏洞:现在只是打印提示,但没把超过12的maxWords修正为12,用户输入15的话循环会跑15次,肯定出问题。
  2. 重复选取问题:当前随机索引的方式会重复选到同一个单词,得避免这种情况。
  3. 缺失棋盘添加逻辑:选完单词后没把它们传到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:30:26