Programm verstehen :D

ocsme

Top Contributor
Hallo zusammen,

ich verstehe das hier Programm nicht so ganz.
Hier mal der Quellcode:
Java:
final char IMPOSSIBLE = '\0';
        char marker = 'Z';
        String input = "AAAAABBBBBBBBBC";
        char last = IMPOSSIBLE;
        int count = 0;
        int compressAbove = 3;
       
        for(int i=0;i<=input.length();i++) {
            char chr = i < input.length()?input.charAt(i):IMPOSSIBLE;
            if(chr != last || count == 9) {
                if(count > compressAbove || last == marker)
                    System.out.printf("%c%d%c", marker, count,last);
                else
                    for(int j=0;j<count;j++) {
                        System.out.print(last);
                       
                    }
                count=0;
            }
            last = chr;
            count++;

        }

Das ganze soll einen String komprimieren. Was ich daran nicht verstehe ist:
Im ersten Durchlauf ist doch
Code:
   if(chr != last || count == 9) {
immer true Wieso klappt es dann aber bei eine Folge wie z. B.

AAABBBBBBBC
das er auch wirklich 3x das A Printet?
1 IF = True
2 IF = False somit im else Zweig dort ist eine Schleife doch diese sollte auch nicht laufen da Count = 0 ist und j = 0 und die Bedingung ist ja j<count! 0<0 also nix läuft.
Dann setzt er den Count wieder auf 0. Somit fehlt doch ein A!

Kann mir das jemand erklären 🙁 Ich verstehe es nicht!
 
ach misst ich hab es 😀
im ersten druchlauf läuft er oben durch die erste if Anweisung. Dann die zweite If Anweisung wird nicht ausgeführt. Der else Zweig die Schleife auch nicht. Dann wird Count auf 0 gesetzt.
Doch dann ist die Schleife ja noch nicht am ende 😀 und erhöht den count um 1. Sowie last wird zu chr 🙂

Oh man 😀
 
Ja sowas nervt 😀 ich bin oft schlimmer aber was man selbst schreibt hihi 😀
Doch ich habe jetzt 1 Woche nicht Programmiert und sitze hier schon wieder als hätte ich vorher nie Programmiert das nervt mich viel mehr 🙁 konnte leider 1 Woche nix machen! Das ist doch nicht normal oder ? 😵

LG
 

Zurück
Oben