Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用随机类生成3个单词_Java_Arrays_Loops_For Loop_Random - Fatal编程技术网

Java 如何使用随机类生成3个单词

Java 如何使用随机类生成3个单词,java,arrays,loops,for-loop,random,Java,Arrays,Loops,For Loop,Random,我得到一个多数组(基于随机选择的页码、段落和行号)来讲述一个故事。我需要生成一个包含从数组中随机抽取的3个单词的密码。必须给出创建密码的规则(例如:密码必须有10个字符长,不能重复同一个单词) 这是针对Java的。(步骤1)密码必须由3个单词组成(步骤2)随机选择页码、段落和行号,并且必须使用随机类使用nextInt()生成随机数。(步骤3)使用split()分隔随机字符串中的每个单词。(步骤4)确保在步骤3中从数组中选择一个随机字。(步骤5)为密码创建限制 我为限制创建了if-else语句。

我得到一个多数组(基于随机选择的页码、段落和行号)来讲述一个故事。我需要生成一个包含从数组中随机抽取的3个单词的密码。必须给出创建密码的规则(例如:密码必须有10个字符长,不能重复同一个单词)

这是针对Java的。(步骤1)密码必须由3个单词组成(步骤2)随机选择页码、段落和行号,并且必须使用随机类使用nextInt()生成随机数。(步骤3)使用split()分隔随机字符串中的每个单词。(步骤4)确保在步骤3中从数组中选择一个随机字。(步骤5)为密码创建限制

我为限制创建了if-else语句。 如果不遵守规则,程序必须始终返回(步骤2)

但在某些情况下,当它失败时,它只打印出通过限制('\n')的单词。有时它会打印1个字,或2个字,或者在我运行程序时它会给出一个错误

password = ridingfun

password = boy 

Password = Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Assign3Q1.main(passGen.java:123)

// line 123 happens is the String sentence = story[pageNum][paraNum][lineNum];

不是100%确定你的意思,但我很肯定你最终会用你的随机数生成器击中一个出界点

如果您的故事长度为10,则nextInt可以选择10,因为它包含您传递给它的整数。因此,如果您以10结尾,然后执行故事[10],您将得到一个越界,因为索引从0开始

我建议

r.nextInt(story.length - 1)

我相信你的问题在于:

int pageNum = r.nextInt(story.length);
int paraNum = r.nextInt(story.length);
int lineNum = r.nextInt(story.length);
段落的数量取决于页面,行数取决于页面和段落。我想你想要的是:

int pageNum = r.nextInt(story.length);
int paraNum = r.nextInt(story[pageNum].length);
int lineNum = r.nextInt(story[pageNum][paraNum].length);
关于查找通过条件的三个单词,在连接它们之前,您可以使用流来实现这一点,而不是使用for循环。目前,不符合你标准的词语将被悄悄忽略:

Stream.generate(this::randomWord)
    .filter(w -> !w.contains("\n"))
    .limit(3)
    .collect(Collectors.joining());
否则,您需要一个字数计数器:

int wordsRequired = 3;
while (wordsRequired > 0) {
    String randomWord = ...;
    if (!randomWord.contains("\n")) {
        System.print...
        randomWord--);
    }
}

还请注意,您可以使用
split(\\s”)
自动删除换行符。这将在包含换行符和制表符的任何空格(而不仅仅是空格)上拆分

您好,我注意到底部程序中有几个区域出现“…”。应该去那里干什么?
Stream.generate(this::randomWord)
    .filter(w -> !w.contains("\n"))
    .limit(3)
    .collect(Collectors.joining());
int wordsRequired = 3;
while (wordsRequired > 0) {
    String randomWord = ...;
    if (!randomWord.contains("\n")) {
        System.print...
        randomWord--);
    }
}