Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java - Alternativa za vnořené cykly?

No, popravdě to jediný kód. Ten, co jsem zmínil, se mně líbil právě v předání těch znaků v jednom řetězci, avšak existuje ještě tento

String[] array = new String[]{"a", "b", "c", "d"};

public static List<String> create(int maxLength, String[] array){
    List<String> strings = new ArrayList<>();
    strings.addAll(create("",0, maxLength, array));
    return strings;
}

private static List<String> create(String current, int currentLength, int maxLength, String[] array){
    List<String> strings = new ArrayList<>();
    if(currentLength < maxLength){
        for(int x=0;x<array.length;x++){
           strings.addAll(create(current + array[x],currentLength + 1, maxLength, array));
        }
    }else{
        strings.add(current);
    }
    return strings;
}

A pak ještě tento

var chars = new char[] {'a', 'b', 'c'};
int variations = 3;
    
var length = chars.length;
var list = new ArrayList<String>();
StringBuilder out = new StringBuilder();

for (int i = 0; i < variations; i++) out.append(chars[0]);

top:
while (true) {
  list.add(out.toString());
  for (int pos = variations - 1; pos >= 0; pos--) {
    char c = out.charAt(pos);
    int cPos = Arrays.binarySearch(chars, c);
    if (cPos < length -1) {
      // We can just increment this one and we're done
      out.setCharAt(pos, chars[cPos + 1]);
      continue top;
    } else {
      // 9-> 10: Every 'lower' digit is reset to first (0).
      out.setCharAt(pos, chars[0]);
    }
  }
  break;
}

Který kód je ale nejoptimálnější, to nevím. To bych musel napsat JUnit test. Nicméně, momentálně to není podstatné, protože vždy to zhavaruje stejnou chybou.

A pokud je vytváříš rychleji, než se stihne uklízet, tak ti dojde paměť.

V tom případě by stačilo použít System.gc();. Otázkou je, kam ho přesně dát a jestli by to pomohlo.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny