递归语法实验室作业中的堆栈溢出错误

时间:2017-02-09 00:47:05

标签: java if-statement random syntax stack-overflow

这项任务中存在很多帖子 - 大多数都想知道如何去做。请让我自己弄清楚其余部分 - 我只是寻找一两个帮助,而不是为我做任务的人。

分配是编写一个程序来实现构建随机句子的语法规则。

当我实现我的代码时,我得到了堆栈溢出,但我在没有错误的示例代码之后对其进行了建模。我知道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]);

        }


    }

我只是在寻找两件事:

  1. 如何修复堆栈溢出错误
  2. 我的if..else声明我做错了什么?
  3. 我需要在某些时候调用simpleSentence(),并在随机加权的时间调用simpleSentence,然后从连接数组中打印一个随机连接,然后运行{{1}再次没有堆栈溢出错误。

    这部分的BNF是:

    sentence()

    可以在此处找到分配要求的副本(如果需要清楚的话)第1项递归语法:http://math.hws.edu/eck/cs225/s10/lab3/

1 个答案:

答案 0 :(得分:0)

  

不,句子会100%的时间自称...这不是python,   因此你的缩进是误导性的。你需要做其他事情{   simpleSentence(); ......句子()}。正如所写,只有第一个   在else之后的声明是它的一部分。 - 很快

这完美地解决了它!谢谢你!