-4

私はこのようなものを持っています:

import java.util.Random;

public class gramatica {
public static void main(String[] args) {

    String [] Vt = {"S","R","L"};
    String [] Vn = {"a","b","c","d","e","f"};

    String [] S = {

            "aS","bS","cR","dL"
    };

    String[] R = {
            "dL","e"
    };

    String []L = {

            "fL","eL","d"
    };
    System.out.println(S[0]);
    String random = (S[new Random().nextInt(S.length)]);
    String chop = (S[new Random().nextInt(S.length)]);

    System.out.println("S->"+random);

S からランダムな選択を行い、たとえば "cR" を取得した後、"R" の代わりに String[] R からのランダムな選択を置き換えたい場合、どうすればよいですか? 例: S から始めて、S からランダムに取得し、cR を取得した場合、R のみを R 文字列配列からランダムに置き換えます。S->cR->cdL (R の代わりに dL を入れる)

4

1 に答える 1

1

これがあなたが望むものだと思います:

import java.util.Random;

public class gramatica {
  public static void main(String[] args) {

    String [] Vt = {"S","R","L"};
    String [] Vn = {"a","b","c","d","e","f"};

    String [] S = {

            "aS","bS","cR","dL"
    };

    String[] R = {
            "dL","e"
    };

    String []L = {

            "fL","eL","d"
    };
    //System.out.println(S[0]);
    String rule = "S";

    Random r = new Random();

    // Make a loop
    while(true) {
      if(rule.contains("S")) {
        rule = rule.replaceFirst("S", S[r.nextInt(S.length)]);
        continue;
      };
      if(rule.contains("R")) {
        rule = rule.replaceFirst("R", R[r.nextInt(R.length)]);
        continue;
      };
      if(rule.contains("L")) {
        rule = rule.replaceFirst("L", L[r.nextInt(L.length)]);
        continue;
      };

      // Nothing to change, break loop
      break;
    };

    // Now we got a random possible rule for S! :)
    System.out.println("S->"+rule);
  };
};

このコードは、文法のランダムな可能な文字列を生成します。:)

于 2013-10-02T18:32:04.183 に答える