if-Abfrage, ungleich und falscher true Wert?

Moin zusammen,

meine Aufgabe ist es, einen Text aus mehreren Wörtern zu lesen und für jedes Wort die längste darin auftretende Folge von Konsonanten zu berechnen. Jedes Wort soll zusammen mit der Länge seiner längsten Konsonantenfolge ausgegeben werden.

Von meinem Verständnis her sieht der Code schon ganz gut (mal davon abgesehen, dass man ihn noch optimieren kann, geht erstmal um die Funktionalität).

Hier ist der Code:
Java:
static void konsonant (char[] array){
            int i; char ch;
            int sum = 0;
            int len = 0;
            for (i = 0; i < array.length; i++){
                ch = array[i];
            // ch wird nacheinander jedes Zeichen des Zeichenarrays zugewiesen
                if (Character.isLetter(ch)){
                    Out.print(ch);
                    if (array[i] != 'a' || array[i] != 'A' || array[i] != 'e' || array[i] != 'E' ||
                        array[i] != 'i' || array[i] != 'I' || array[i] != 'o' || array[i] != 'O' ||
                        array[i] != 'u' || array[i] != 'U' ){
                        sum += 1;}
                     else {
                    len = sum;
                    sum = 0; }
            
                } else {
                    Out.print(" -> Längste Folge ist: " + len);
                    Out.println();
                    sum = 0;
                        }
                        }
            }
    public static void main(String[] args) {
    
        String text = new String("In der Deutschschweiz gibt es viel Weihnachtsschmuck.");
        // Hier wird der zu untersuchende Text eingegeben und als String gespeichert.
        char[] array = text.toCharArray();
        // Der Text wird zum CharArray transformiert, sodass die einzelnen Zeichen abfragbar gemacht werden
        konsonant(array);
    }
}

Folgendes Problem:
Beim ersten Durchgehen im Debugger setzt er
i = 0 und ch = I. Soweit alles gut.
Nach der Prüfung, ob es ein Buchstabe ist, geht er in die if-Abfrage.
Obwohl hier if (array != 'I') steht, summiert er die trotzdem mit 1.
Warum tut er das? Nach meinem Verständnis müsste er doch in dem Fall in den else-Zweig gehen.

Wo ist mein Denkfehler?
Ich bin sehr dankbar für eure Hilfe.
 
Zuletzt bearbeitet von einem Moderator:
Dein 'I' wird u.a. von der Bedingung
Code:
array[i]!='a'
mit true bewertet. Da die ganzen anderen Bedingungen verodert sind, reicht das um in den Anweisungsblocks des if-Stmt zu gelangen.
 
Weil es so schön war, gleich ne Frage hinterher.
Hier der Code nochmal:
Java:
static void konsonant (char[] array){
            int i; char ch;
            int sum = 0;
            int len = 0;
            for (i = 0; i < array.length; i++){
                ch = array[i];
            // ch wird nacheinander jedes Zeichen des Zeichenarrays zugewiesen
                if (Character.isLetter(ch)){
                    Out.print(ch);
                    if (array[i] != 'a' && array[i] != 'A' && array[i] != 'e' && array[i] != 'E' &&
                        array[i] != 'i' && array[i] != 'I' && array[i] != 'o' && array[i] != 'O' &&   
                        array[i] != 'u' && array[i] != 'U') {
                        sum += 1;
                    }if (sum > len){
                            len = sum;
                       
                    } else {
                    sum = 0; }
               
            } else {
                    Out.print(" -> Längste Folge ist: " + len);
                    Out.println();
                    sum = 0;
                    len = 0;
                        }
                        }
            }
    public static void main(String[] args) {
       
        String text = new String("In der Deutschschweiz gibt es viel Weihnachtsschmuck.");
        // Hier wird der zu untersuchende Text eingegeben und als String gespeichert.
        char[] array = text.toCharArray();
        // Der Text wird zum CharArray transformiert, sodass die einzelnen Zeichen abfragbar gemacht werden
        konsonant(array);
    }
}

Das Problem tritt das erste mal beim "t" von Deutschschweiz auf.
t geht in die if-Schleife und erhöht die Summe um 1.
Danach geht t aber auch nochmal in den else-Zweig und setzt die Summe wieder 0, obwohl er eigentlich gar nicht den else-zweig betreten dürfte.

Sicherlich auch nur ne Kleinigkeit, aber ich bekomm es grad net gelöst :/
 
Eine if-Schleife gibt es nicht. Streich das Wort mal ganz schnell aus deinem Wortschatz.

Besser?
Code:
 if (array[i] != 'a' && array[i] != 'A' && array[i] != 'e' && array[i] != 'E' &&
                        array[i] != 'i' && array[i] != 'I' && array[i] != 'o' && array[i] != 'O' && 
                        array[i] != 'u' && array[i] != 'U') {
                        sum += 1;
                        if (sum > len){
                            len = sum;
                        }
                    }else{
                         sum =0;
                    }
 
Mal angenommen, ich möchte nicht nur die Anzahl der längsten Reihe aufeinanderfolgenden Konsonanten, sondern auch noch die exakte Folge also z.B( Ddda - Folgenlänge=3, exakte Folge=Ddd) wie würde ich da drauf kommen? Sitz jetz schon etwas davor, aber es will nicht klappen.
Ich dachte mir, ich merke mir jeden Index, bei dem der Counter wieder bei 0 anfängt und wenn die Differenz zwischen 2 Indizes gleich meinem Maximalwert ist, habe ich den gesuchten Bereich und diesen gebe ich dann aus.
Fällt euch auf anhieb eine leichtere Lösung ein?
 
Mein du so etwas?:
Code:
[
  {
    "i1": 10,
    "i2": 18,
    "string": "tschschw"
  },
  {
    "i1": 41,
    "i2": 49,
    "string": "chtsschm"
  },
  {
    "i1": 1,
    "i2": 4,
    "string": "n d"
  },
  {
    "i1": 5,
    "i2": 8,
    "string": "r D"
  },
  {
    "i1": 20,
    "i2": 23,
    "string": "z g"
  },
  {
    "i1": 24,
    "i2": 27,
    "string": "bt "
  },
  {
    "i1": 28,
    "i2": 31,
    "string": "s v"
  },
  {
    "i1": 33,
    "i2": 36,
    "string": "l W"
  },
  {
    "i1": 38,
    "i2": 40,
    "string": "hn"
  },
  {
    "i1": 50,
    "i2": 52,
    "string": "ck"
  }
]

Klar, funktioniert das. 🙂
 
Unsinn^^

Solange du noch Konsonanten hast, konkatenierst du die, zb mit StringBuilder, wenn es die längste Folge ist, speicherst du den in einer Variabel wie du es mit len auch machst, und im else-Fall erstellst du einen neuen zum konkatenieren. Ist Analog zu sum und len 😉
 

Zurück
Oben