如何从字符串中获取随机单词?

时间:2013-05-14 18:06:47

标签: java

我想用Java创建一个刽子手游戏,但我不确定如何设置整个游戏。我正在开发一个系统,他们拥有的信件越多,他们出现在刽子手难题上的机会就越少。

    import java.ultil.Scanner;
    public class Hangman {
      public static void main(string[]args); // Let's try a main?
      scr = newScanner(system.in); // used for keyboard input
      string words = "Hi:Bye:Hello:Cheese:Puppies";
      int length = words.length();
      }
    }

如何从变量“单词”中获取一个随机单词,并计算它的长度?

请记住,我不是最好的Java编码。

5 个答案:

答案 0 :(得分:4)

这可以通过选择一个随机单词并查找其长度来回答该部分。

String words = "Hi:Bye:Hello:Cheese:Puppies";
String[] wordsAsArray = words.split(":");

int index = new Random().nextInt(wordsAsArray.length);

String randomWord = wordsAsArray[index];
System.out.println("Random word: '" + randomWord + "'. It is of length: " + randomWord.length());

答案 1 :(得分:3)

如果您想要使用计数最高的单词,那么您的问题不应该是一个随机单词。它应该是关于按长度排序单词,然后从前N个最长单词中选择一个随机单词

创建一个数组并添加你的单词

    StringTokenizer tokenizer = new StringTokenizer("Boy:Chicken:mango", ":");

    String [] words = new String [tokenizer.countTokens()];
            int counter =0;
            while (tokenizer.hasMoreElements()) {
                String word = (String) tokenizer.nextElement();
                words[counter] = word;
                counter++;
            }

如果您想选择计数最高的单词,请按最高计数对单词进行排序。

您可以放置​​在hashmap中,然后迭代选择具有最高

的那些
HashMap<String, Integer> count = new HashMap<String, Integer>();

    for (String word : words) {
        if (!count.containsKey(word)) {
            count.put(word, word.length());
        }
    }

选择一个随机词

Random numGen= new Random();
String word = words [numGen.nextInt(words.size)];

对于实际有效的排序,你需要为单词编写自己的比较器(基于长度,但首先是更长的单词),然后创建一个PriorityQueue,在那里添加单词,当你删除()时你我会得到最长的单词。

答案 2 :(得分:1)

String words = "Hi:Bye:Hello:Cheese:Puppies";

String[] wordsSplit = words.split(":");

然后随机化结果数组。但正如其他人所指出的那样,你最好从一系列词开始。

请参阅文档:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29

你有语法错误。获取IDE。

答案 3 :(得分:1)

要获得任何给定String的长度,请使用:

string.length();

为了得到一个随机单词(并且每个单词根据其长度有不同的出现机会),首先你需要将你的单词添加到某种列表中,如下所示:

ArrayList<String> words = new ArrayList<String>();
words.add("word");
words.add("word2");
words.add("etc");

以下方法将从列表中返回一个随机单词。单词越长,被选中的机会就越少:

String selectRandomWord(ArrayList<String> words){
int lengthOfLongestWord = 200;
List<Integer> wordsTimesLength = new ArrayList<Integer>();

for (int i = 0;i<words.size();i++){
  for (int e = 0;e<Math.pow(words.get(i).length,-1)*lengthOfLongestWord;e++){

  wordsTimesLength.add(i);
  }
}

int randomIndex = generator.nextInt(wordsTimesLength.size());

return words.get(wordsTimesLength.get(randomIndex));
}

请注意,如果您的单词超过200个字符,则需要更改lengthOfLongest(我认为除了以下情况之外没有任何单词)。要使用该方法,您可以简单地调用它:

selectRandomWord(words);

答案 4 :(得分:0)

这里有一些代码可以用于你想要做的事情:

public class Hangman {

    public static void main(String[] args) {
        Scanner scr = new Scanner(System.in); //Used for keyboard input
        List<String> words = new ArrayList<String>(); {
            words.add("Hi");
            words.add("Bye");
            words.add("Hello");
            words.add("Cheese");
            words.add("Puppies");
        }

        Random numberGenerator = new Random(); //Creates Random object
        int randomNum = numberGenerator.nextInt(words.size()); //Return a num between 0 and words.size()-1

        System.out.println(randomNum); //Prints the random number outputted by the generator
        System.out.println(words.get(randomNum)); //Retrieves the String located at the index value 
        System.out.println(words.get(randomNum).length()); //Returns the size of the words
    }
}