此作業中存在大量帖子 - 最想知道如何去做。請讓我自己弄清楚其餘部分 - 我只是尋找一兩點幫助,而不是有人爲我完成我的任務。遞歸語法上的堆棧溢出錯誤實驗室作業
該任務是編寫一個程序,實現語法規則來構建隨機語句。
當我實現了我的代碼,我得到一個堆棧溢出,但我不會有錯誤示例代碼爲藍本的。我知道這是我的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
的隨機加權百分比,然後打印從結合陣列隨機相結合,然後在沒有堆棧溢出錯誤再次運行sentence()
。
的BNF這部分是:
<sentence> ::= <simple_sentence> [ <conjunction> <sentence> ]
<simple_sentence> ::= <noun_phrase> <verb_phrase>
的分配要求的副本可以在這裏找到(如果它需要的清晰度)標準桿1遞歸語法:http://math.hws.edu/eck/cs225/s10/lab3/。
一個stackoverflow錯誤意味着你遞歸太多次了。 – Carcigenicate
如果我正確理解你的代碼,'sentance'會在80%的時間內調用它自己。 – Carcigenicate
感謝您的回覆。我意識到這一點 - 但我不知道如何限制遞歸。我相信這是在if ... else語句中發生的,但我不確定爲什麼會發生這種情況,當它不在給出的指導示例代碼的示例代碼中時。 –