【问题标题】:Word-Puzzle (ArrayList problems)字谜(ArrayList 问题)
【发布时间】:2015-05-19 05:39:26
【问题描述】:

所以我一直在创建一个 Word-Puzzle,我最近遇到了索引越界问题。这已经解决了,但是程序没有做我想做的事情。我的想法是测试类将在数组中打印 3 个单词,例如[FEN,GNU,NOB](是的,它们显然是真正的英文单词)。然后检查每个单词组合的第一个字母是否是一个单词等等,例如如果是 FGN,则将其添加到下一个 ArrayList 中,否则重新开始。例如,理想的输出是 [FEN, GNU, NOB] [FGN, ENO, NUB]。但是当前输出是 [FEN, GNU, NOB] [SOY, SOY, SOY] 或 [FEN, GNU, NOB] []。

测试类

public class Test_WordPuzzleGenerator {
	public static void main(String[] args) throws FileNotFoundException {
		
		System.out.println("Test 1: size 3");
		int size = 3;
		Puzzle.WordPuzzleGenerator.generatePuzzle(size);

	}

}
字生成器:
public class WordPuzzleGenerator {
static ArrayList<String> wordList = new ArrayList<String>();
public static void generatePuzzle(int size) throws FileNotFoundException {
    ArrayList<String> puzzleListY = new ArrayList<String>();
    ArrayList<String> puzzleListX = new ArrayList<String>();
    String randomXWord;
    String letterSize = "" + size;
    makeLetterWordList(letterSize);
    boolean finished = false;
    while ( !finished ) {
        finished = true;
        puzzleListX.clear();
        puzzleListY.clear();
        for (int i = 0; i < size; i++) {
            int randomYWord = randomInteger(wordList.size());
            String item = wordList.get(randomYWord);
            puzzleListY.add(item);
        }
        for (int i = 0; i < puzzleListY.size(); i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < puzzleListY.size(); j++) {
                sb.append(puzzleListY.get(j).charAt(i));
            }
            randomXWord = sb.toString();
            if (!wordList.contains(randomXWord)) {
                break;
            }
            puzzleListX.add(randomXWord);
            if (puzzleListX.size() == size){
                finished = false;
            }


        }

    }
    System.out.print(puzzleListY);
    System.out.print(puzzleListX);
}

public static int randomInteger(int size) {
	Random rand = new Random();
	int randomNum = rand.nextInt(size);
	return randomNum;
}



public static void makeLetterWordList(String letterSize) throws FileNotFoundException {

	Scanner letterScanner = new Scanner( new File (letterSize + "LetterWords.txt"));
	wordList.clear();
    while (letterScanner.hasNext()){
		wordList.add(letterScanner.next());
	}
	letterScanner.close();
}
}

【问题讨论】:

  • 第二个循环你在哪里使用i
  • @ajb 我不在嵌套的 for 循环中使用 I,如果我将 .charAt(j) 更改为 (i) 它有时只会打印 1 个正确的单词,其余时间显示空数组列表。例如测试 1:尺寸 3 [ACE, BAD, SKY][ABS]
  • 我不明白你的 while(!finished) 循环。它只会运行一次,因为您永远不会在循环中再次将完成设置为 false。
  • @B.Kemmer 供参考 我应该在循环中的何处将完成设置为 false?
  • 最初的问题是,如果它只运行一次,你为什么还要在这个位置循环?

标签: java arraylist


【解决方案1】:

我认为您对 finished 变量感到困惑。将while 条件替换为puzzleListX.size() != size,您的代码应该可以工作。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 2011-10-01
    • 1970-01-01
    • 2013-06-17
    • 2016-05-10
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多