如何随机显示给定单词

时间:2018-04-14 23:54:35

标签: java random char

根据@camickr的建议,这里有一个关于我所处的位置以及我所处理的内容的更新。我现在遇到的问题是,因为我必须在结尾处有一个return语句,所以我只能返回ArrayList字母。

每次按下提示按钮时,解决方案位置中只出现一个字符,它是[],但不会显示构成解决方案的实际字母。

public String generateLetterHint(int count, String word) {

    String[] answerArray = word.split("");
    ArrayList<String> letters = new ArrayList<String>(Arrays.asList(answerArray));
    //StringBuilder string = new StringBuilder();
    Collections.shuffle(letters);

    while (!letters.isEmpty()) {
        String letter = letters.remove(0);
        System.out.println(letter);
    }
    return letters.toString();
}    

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

将字符串的每个(唯一)字母添加到ArrayList的一种方法。

然后您可以使用Collections.shuffle(...)方法随机化字母。

每次&#34; Hint&#34;按下按钮:

  1. 收到索引0的信件
  2. &#34;除去&#34;来自职位0的信件
  3. 给出提示。
  4. 现在下一次&#34; Hint&#34;单击按钮,索引0处将显示不同的字母。

    当然,每当用户猜到一封正确的字母时,您需要&#34;删除&#34;也来自ArrayList的那封信。

    编辑:

    显示概念证明的简单示例:

    import java.util.*;
    
    public class Main
    {
        public static void main(String[] args) throws Exception
        {
            String answer = "answer";
    
            String[] answerArray = answer.split("");
            ArrayList<String> letters = new ArrayList<String>(Arrays.asList(answerArray));
    
            Collections.shuffle( letters );
    
            while (!letters.isEmpty())
            {
                String letter = letters.remove(0);
                System.out.println(letter);
            }
        }
    }
    

    在实际代码中,您只需创建一次ArrayList,并在确定&#34;回答&#34;是的。

    然后,每当您需要提示时,您只需调用一个方法:

    public String getHint(ArrayList letters)
    {
        return (letters.isEmpty() ? "" : letters.remove(0);
    }
    

    如果没有更多提示,这将只返回一个空字符串。虽然更好的解决方案是在提示完成后禁用提示按钮。

答案 1 :(得分:0)

它的工作只有一个答案。您可以修改然后同时使用多个答案。当您将字符串发送到函数时,它会为您提供一个字符串内部唯一的字母。

package com.Stackoverflow;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RandomlyString {
    private static List<Character> selectableLetters;   // it store randomly selectable letters
    private static boolean isFirst = true;

    private static char letterHint(String answer) {
        Random rnd = new Random();

        // when function starts in first time, split the string letter by letter
        if (isFirst) {
            selectableLetters = splitString(answer);
        }
        isFirst = false;

        if(!selectableLetters.isEmpty()) {
            int hintIndex = rnd.nextInt(selectableLetters.size());  // select a letter randomly
            char hint = selectableLetters.get(hintIndex);   // put this letter to hint
            selectableLetters.remove(hintIndex);    // then remove this letter from selectableLetters, this is for don't select the same letter twice
            return hint;
        } else {
            System.out.println("There is no hint!");
            return ' ';
        }
    }

    private static List<Character> splitString(String string) {
        List<Character> chars = new ArrayList<>();

        // split the string to letters and add to chars
        for (char c: string.toCharArray()) {
            chars.add(c);
        }
        return chars;
    }

    public static void main(String[] args) {
        String answer = "Monkey";

        for(int i=0; i<7; i++) {
            System.out.println("Hints: " + letterHint(answer)); // it writes hint to screen
            System.out.println("Other letters: " + selectableLetters);  // currently selectable letters for hint
        }
    }
}