【问题标题】:Java Programming: Array's and Random GenJava 编程:数组和随机生成
【发布时间】:2013-04-16 00:03:45
【问题描述】:

我有一个任务是创建一个生成随机“诗歌”的程序。这是我的代码:

package poem;

import java.util.Random;


public class Poem {

    public static void main(String[] args) {
        String rhyme1[] = {"ball", "call", "mall", "hall", "guy named Paul"};
        String rhyme2[] = {"cat","hat", "bat", "rat", "mat", "guy named Pat"};
        String nouns[] = {"you", "I", "girl", "boy", "man", "woman"};
        String verbs[] = {"run", "jump", "dive", "sink", "fall", "collapse", "swim", "love"};
        String others[] = {"like a", "into a", "nothing like a"};

        Random gen = new Random();

        String currentNoun = nouns[gen.nextInt(nouns.length)];
        String currentVerb = verbs[gen.nextInt(verbs.length)];
        String currentRhyme1 = rhyme1[gen.nextInt(rhyme1.length)];
        String currentRhyme2 = rhyme2[gen.nextInt(rhyme2.length)];
        String currentOther = others[gen.nextInt(others.length)];

        System.out.printf("%s %s %s %s \n", currentNoun, currentVerb, currentOther, currentRhyme1);
        System.out.printf("%s %s %s %s \n", currentNoun, currentVerb, currentOther, currentRhyme1);}}

我的问题是,当我运行它时,我两次都得到完全相同的行。 如何每次获得不同的随机生成的行?提前致谢。

【问题讨论】:

  • 您需要研究一种获取随机数据的方法,作为种子。
  • @Adel,那个构造函数应该做得很好。
  • 提示:使用arrayLists,效果会更好
  • 你不能指望一个变量在不重新分配的情况下随机变化。
  • 嗯,不是因为你实际上有两次相同的 printf 吗?

标签: java arrays random


【解决方案1】:

问题是每个变量只调用一次 gen.nextInt 。当您生成随机数并将其分配给 currentX 时,这是您分配它的唯一时间。您应该将字符串赋值和 sysout 放在一个循环中,以生成新的随机值并打印它们。

即像

while (true) {
     int i = gen.nextInt(10);
     System.out.println("foo " + i);
}

【讨论】:

  • 我不认为将新手与 无限 循环混淆是一个好主意。
【解决方案2】:

您分配一次currentNouncurrentVerb 等,然后将它们打印两次。除非您在再次打印之前重新分配它们,否则它们的值不会改变。

【讨论】:

    【解决方案3】:

    变量从你第一次调用System.out.printf() 到第二次没有改变,所以你只是打印了两次。一种解决方法是创建一个 generatePoems 方法,该方法将打印任意数量的诗歌,然后从 main 方法调用它。这样整个事情会更干净,代码相对可重用。

    void generatePoems(int numberOfPoems){ //This block should be outside of the main method
      for (int i = 0; i<numberOfPoems;i++){
    
      String rhyme1[] = {"ball", "call", "mall", "hall", "guy named Paul"};
      String rhyme2[] = {"cat","hat", "bat", "rat", "mat", "guy named Pat"};
      String nouns[] = {"you", "I", "girl", "boy", "man", "woman"};
      String verbs[] = {"run", "jump", "dive", "sink", "fall", "collapse", "swim", "love"};
      String others[] = {"like a", "into a", "nothing like a"};
    
      Random gen = new Random();
    
      String currentNoun = nouns[gen.nextInt(nouns.length)];
      String currentVerb = verbs[gen.nextInt(verbs.length)];
      String currentRhyme1 = rhyme1[gen.nextInt(rhyme1.length)];
      String currentRhyme2 = rhyme2[gen.nextInt(rhyme2.length)];
      String currentOther = others[gen.nextInt(others.length)];
      System.out.printf("%s %s %s %s \n", currentNoun, currentVerb, currentOther, currentRhyme1);
      }
    }
    

    你的主要方法应该是这样的:

    public static void main(String[] args) {
      generatePoems(2);
      /* 2 is the number of poems you want to generate. Can be anything as long as its
      under 2147483647 */
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多