这项任务中存在很多帖子 - 大多数都想知道如何去做。请让我自己弄清楚其余部分 - 我只是寻找一两个帮助,而不是为我做任务的人。
分配是编写一个程序来实现构建随机句子的语法规则。
当我实现我的代码时,我得到了堆栈溢出,但我在没有错误的示例代码之后对其进行了建模。我知道if...else
sentence();
语句引起它的问题。
这是我的代码:
import java.util.Random;
import java.util.ArrayList;
import java.util.List;
public class RecursiveSyntax {
private static final String[] conjunction = { "and", "or", "but", "because" };
private static final String[] properNoun = { "Fred", "Jane", "Richard Nixon", "Miss America" };
private static final String[] commonNoun = { "man", "woman", "fish", "elephant", "unicorn" };
private static final String[] determiner = { "a", "the", "every", "some" };
private static final String[] adjective = { "big", "tiny", "pretty", "bald" };
private static final String[] intransitiveVerb = { "runs", "jumps", "talks", "sleeps" };
private static final String[] transitiveVerb = { "loves", "hates", "sees", "knows", "looks for", "finds" };
public static void main(String[] args) {
List<String[]> arrayList = new ArrayList<>();
arrayList.add(conjunction);
arrayList.add(properNoun);
arrayList.add(commonNoun);
arrayList.add(determiner);
arrayList.add(adjective);
arrayList.add(intransitiveVerb);
arrayList.add(transitiveVerb);
while (true) {
sentence();
System.out.println(".\n\n");
try {
Thread.sleep(3000);
}
catch (InterruptedException e) {
}
}
}
private static void sentence() {
int c = (int)(Math.random()*conjunction.length);
double x = Math.random();
if (x < 0.2)
simpleSentence();
else
simpleSentence();
System.out.print(conjunction[c]);
sentence();
}
private static void simpleSentence() {
nounPhrase();
verbPhrase();
}
private static void nounPhrase() {
int pn = (int)(Math.random()*properNoun.length);
System.out.print(" "+ properNoun[pn] + " ");
}
private static void verbPhrase() {
int iv = (int)(Math.random()*intransitiveVerb.length);
System.out.print(" " + intransitiveVerb[iv]);
}
}
我只是在寻找两件事:
if..else
声明我做错了什么? 我需要在某些时候调用simpleSentence()
,并在随机加权的时间调用simpleSentence
,然后从连接数组中打印一个随机连接,然后运行{{1}再次没有堆栈溢出错误。
这部分的BNF是:
sentence()
可以在此处找到分配要求的副本(如果需要清楚的话)第1项递归语法:http://math.hws.edu/eck/cs225/s10/lab3/。
答案 0 :(得分:0)
不,句子会100%的时间自称...这不是python, 因此你的缩进是误导性的。你需要做其他事情{ simpleSentence(); ......句子()}。正如所写,只有第一个 在else之后的声明是它的一部分。 - 很快
这完美地解决了它!谢谢你!