Java 给定大小为n的数组中r元素的所有可能组合

Java 给定大小为n的数组中r元素的所有可能组合,java,arrays,if-statement,size,Java,Arrays,If Statement,Size,我有一段代码,它给出了我的数组{'a','b','c','d'}中大小为4的四个元素的所有可能组合 一切都正常,但我需要在代码中添加一些规范,我不知道该怎么做 我要补充的两个条件是: 字符串中的“b”必须始终后跟“a”,并且一个字符串不能同时包含字符“d”和字符“a” static void printAllKLength(char[] set, int k) { int n = set.length; printAllKLengthRec(set,

我有一段代码,它给出了我的数组{'a','b','c','d'}中大小为4的四个元素的所有可能组合

一切都正常,但我需要在代码中添加一些规范,我不知道该怎么做

我要补充的两个条件是: 字符串中的“b”必须始终后跟“a”,并且一个字符串不能同时包含字符“d”和字符“a”

    static void printAllKLength(char[] set, int k) { 
        int n = set.length;  
        printAllKLengthRec(set, "", n, k); 
    } 

    static void printAllKLengthRec (char[] set,  
                                   String prefix,  
                                   int n, int k) 
    { 

        if (k == 0)  {
            System.out.println(prefix); 
            return; 
        } 
        for (int i = 0; i < n; ++i) {
            String newPrefix = prefix + set[i];  
            printAllKLengthRec(set, newPrefix,  
                                    n, k - 1);  
        } 
    } 

    public static void main(String[] args) {
        char[] set1 = {'a', 'b', 'c', 'd'}; 
        int k = 4; 
        printAllKLength(set1, k); 


    } 
    } 
static void printAllKLength(char[]集,int k){
int n=设置长度;
printallklengtrec(set,“”,n,k);
} 
静态void printallklengtrec(字符[]集,
字符串前缀,
整数n,整数k)
{ 
如果(k==0){
System.out.println(前缀);
返回;
} 
对于(int i=0;i
编辑 多亏了一些帮助,我写了以下代码:

    public static boolean aFollowsB(String s) {
          char[] set1 = s.toCharArray();

          for (int i = 0; i < set1.length; i++) {
            // If B is the last char, A can't possilby follow
            if (i == set1.length - 1) {
              if (set1[i] == 'b') { return false; }
            // Else if we encounter B, make sure next is an A
            } else {
              if (set1[i] == 'b') {
                if (set1[i+1] != 'a') { return false; }
              }
            }
          }

          return true;
        }

    //Création de la méthode permettant de dire qu'on ne peut avoir 'a' et 'd' dans la même string
        public static boolean hasOnlyAOrD(String s) {
          char[] set1 = s.toCharArray();

          boolean hasA = false;
          boolean hasD = false;

          for (int i = 0; i < set1.length; i++) {
            if (set1[i] == 'a') {
              hasA = true;
            } else if (set1[i] == 'd') {
              hasD = true;
            }
          }

          if (hasA && hasD) {
            return false;
          }

          return true;
        }

    //Création de la méthode printAllKLength pour imprimer toutes les strings possibles de longueur k
        static void printAllKLength(char[] set, int k) { 
            int n = set.length;  
            printAllKLengthRec(set, "", n, k); 
        } 

        static void printAllKLengthRec (char[] set,  
                                       String prefix,  
                                       int n, int k) 
        { 

            if (k == 0)  {
                System.out.println(prefix); 
                  System.out.println(prefix);
                return; 

            } 
            for (int i = 0; i < n; ++i) {
                String newPrefix = prefix + set[i];  
                printAllKLengthRec(set, newPrefix,  
                                        n, k - 1);  
            } 
        } 

        public static void main(String[] args) {
            char[] set1 = {'a', 'b', 'c', 'd'}; 
            int k = 4; 
            if (aFollowsB(set1) && hasOnlyAOrD(prefix)) {
                printAllKLength(set1, k); 
                }
}}
public静态布尔AFOLOWSB(字符串s){
char[]set1=s.toCharArray();
对于(int i=0;i

但是它说followsb和hasonlyord方法不适用于参数…

创建以下两种方法或类似的方法(逻辑在这里)


谢谢!你能解释一下“char[]set=s.toCharArray()”中的“s”是什么吗。变量“s”不存在,我也不确定它应该是什么(很抱歉,如果这很明显,我是一个乞丐)@NatachaBK您会注意到我将
String s
传入每个新方法。这就是
s
的来源
s
实际上是
前缀
,因为
前缀
是我在代码的最后一位传递给这些函数的内容。
public static boolean aFollowsB(String s) {
  char[] set = s.toCharArray();

  for (int i = 0; i < set.length; i++) {
    // If B is the last char, A can't possilby follow
    if (i == set.length - 1) {
      if (set[i] == 'b') { return false; }
    // Else if we encounter B, make sure next is an A
    } else {
      if (set[i] == 'b') {
        if (set[i+1] != 'a') { return false; }
      }
    }
  }

  return true;
}

public static boolean hasOnlyAOrD(String s) {
  char[] set = s.toCharArray();

  boolean hasA = false;
  boolean hasD = false;

  for (int i = 0; i < set.length; i++) {
    if (set[i] == 'a') {
      hasA = true;
    } else if (set[i] == 'd') {
      hasD = true;
    }
  }

  if (hasA && hasD) {
    return false;
  }

  return true;
}
if (aFollowsB(prefix) && hasOnlyAOrD(prefix)) {
  System.out.println(prefix);
}