Erste Schritte AAAA bis ZZZZ

krgewb

Top Contributor
Ich möchte ein Programm schreiben, das solch eine Auflistung erzeugt:
Code:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
AA
AB
AC
...
AZ
BA
BB
BC
...
ZY
ZZ
AAA
AAB
AAC
...
ZZX
ZZY
ZZZ
AAAA
...
ZZZZ
 

krgewb

Top Contributor
Ich schaffe es nicht, es so zu programmieren, das die Zeichenkette beliebig lang sein kann. Wenn ich ein weiteres Zeichen machen will, brauche ich eine weitere verschachtelte for-Schleife.
 

httpdigest

Top Contributor
Java:
public class Buchstaben {
  /**
   * Reinterpretiere die gegebene Zahl zur Basis 26 und
   * konkateniere zu einem String.
   */
  private static String cvt(long v) {
    return v --> 0 ? cvt(v / 26) + (char) ('A' + v % 26) : "";
  }
  /**
   * Erzeuge Stream zum Generieren beliebig langer Strings.
   */
  private static java.util.stream.Stream<String> strings() {
    return java.util.stream.LongStream
        .iterate(1, i -> i + 1)
        .mapToObj(Buchstaben::cvt);
  }
  /**
   * Anzahl an benötigten Strings/Zeilen für genau `n` 'Z's.
   */
  private static long numStringsFor(int n) {
    return n > 0 ? 26 * (numStringsFor(n - 1) + 1) : 0;
  }
  public static void main(String[] args) {
    // Gebe 'A' .. 'ZZZZ' aus:
    strings()
      .limit(numStringsFor(4))
      .forEach(System.out::println);
  }
}
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Java:
    public void next(StringBuilder b) {
        int n = b.length();
        int i = 0;
        boolean carry = true;
        while (carry && i < n) {
            char ch = (char)(b.charAt(i) + 1);
            carry = ch > 'Z';
            b.setCharAt(i, carry ? 'A' : ch);
            i++;
        }
        if (carry) {
            b.append('A');
        }
    }
oder
Java:
    void next(StringBuilder s, int i) {
        if (i >= s.length()) {
            s.append('A');
        } else {
            char ch = (char)(s.charAt(i) + 1);
            s.setCharAt(i, ch > 'Z' ? 'A' : ch);
            if (ch > 'Z') {
                next(s, i+1);
            }
        }
    }
 

Barista

Top Contributor
Suche mal im Netz nach alphabetischer Sequenz.

Es gab mal einen Blogbeitrag von Lukas Eder (Suchmaschine JOOQ) dazu.

Du solltest aber Deine eigene Lösung programmieren, es geht Dir ja ums Lernen(wahrscheinlich war dieser Satz nicht nötig).

Ich habe dies mal als Bewerberaufgabe in meiner aktuellen Firma gemacht.

Wenn Du eine Zeichenkette verwendest, ist das schon mal ganz gut.

Du musst die einzelnen Chars der Zeichenkette als Stellen eines Zählers ansehen.

Beim String(Zeichenkette) musst Du mit der Erhöhung am Ende anfangen (Stelle ganz rechts, Index = String Länge minus 1),

Eine Zählerstelle kann erhöht werden, bei Z gibt es einen Überlauf.

Also Z durch A ersetzen und die nächsthöhere Stelle erhöhen.

Falls dort keine Stelle ist (Index == 0) links am String ein A anfügen.
 

Neue Themen


Oben