-4

我想用 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 的。

4

5 回答 5

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());
于 2013-05-14T18:22:03.057 回答
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,在其中添加单词,当您执行 remove() 时,您将获得长度最长的单词。

于 2013-05-14T18:14:33.920 回答
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。

于 2013-05-14T18:13:03.020 回答
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);
于 2013-05-14T18:34:32.720 回答
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
    }
}
于 2013-05-14T18:42:20.337 回答