# Wieso werden Char-Werte wie Zahlen addiert?



## Feder (23. Okt 2007)

Mein  Programm addiert die Buchstaben des Chars wie Zahlen...
Dabei will ich ja nicht die Summe vergleichen, sondern die Gleichheit der Zeichenfolgen prüfen.


```
char[] Text= {'M','E','I','N','E','K','L','E','I','N','E'}; 

            if (Text[4]+Text[5]+Text[6]==Text[7]+Text[8]+Text[9])            
            {          
               
            }
```

_Das macht das Programm:_
                               Text[4]+Text[5]+Text[6])==(Text[7]+Text[8]+Text[9]
Buchstabe:                   E     +     K     +      L   ==    E    +      I    +    N
Dezimalwert(Ascii):      69    +    75     +     75  ==   69   +     73   +   78
Ergebnis:                                  220                ==              220

Das Programm gibt mir aus, dass "EKL" das gleiche wie "EIN" ist.

Meine Frage an euch: Wie mache ich, dass er die Buchstaben als Buchstaben ansieht und nicht als Zahlen bzw. wie kann ich es machen, dass er die Buchstabenfolgen und nicht die Summe der Buchstaben vergleicht?


----------



## Guest (23. Okt 2007)

char sind genau genommen auch nur zahlen, die aber als zeichen interpretiert werden. mit dem operator + werden zu allererst zahlen addiert und da char ja einen zahlenwert besitzt ... ... ... 
einziges mir bekanntes gegenbeispiel hierfür ist die klasse String für die der operator + eine sonderbedeutung hat.

wenn du zeichenfolge miteinander vergleichen willst, ist String die lösung für dein problem. gehe dabei einfach wie folgt vor: erzeuge aus den charactern die du vergleichen willst einen String. das kann beispielsweise in der art passieren:

```
char[] text = new char[]{...};
String text1 = new String();
text1 += text[0];
text1 += text[1];
text1 += text[2];

String text2 = new String();
text2 += text[3];
text2 += text[4];
text2 += text[5];
```
auch eine for-schleife ist hier nicht nur denkbar sondern meißtens auch äusserst effektiv und anzuraten. kommt halt immer drauf an, wie du deine character-zeichenketten erhältst. wenn du aus einem ganzen char[] einen String machen willst, geht das mittels new String(myCharArray);.

anschließend brauchst du nur die beiden Strings mittels equals(...) abzugleichen. du kannst sogar die reihenfolge der Strings nach alphabethischer sortierung erfahren über die methode compareTo(...). bei letzterem könntest du sogar einen eigenen Comparator verwenden, der beispielsweise sonderfälle beachtet.

übrigends denke an saubere programmierung. klassennamen haben einen großen anfangsbuchstaben, alles andere beginnt mit einem kleinen buchstaben. also auch dein char[] Text sollte, damit jeder weiß, das Text eine variable ist und keine klasse, mit einem kleinen buchstaben beginnen.

viel erfolg

wayne


----------



## Feder (23. Okt 2007)

Danke dir für die gute Hilfe. 

Ich versuche das grade mit Strings, so wie du es gesagt hattest, nur leider klappt das bei mir nicht.
Das war auch der Grund, warum ich Char gewählt habe. ^^

So sieht es bei mir eigentlich in Char aus... was allerdings wegen dem Problem, dass die Zeichen als Zahlen interpretiert werden bzw. gehandhabt werden, nicht klappt.


```
char[] text= {'M','E','I','N','E','K','L','E','I','N','E'};
public void Buchstabenfolgen()
    {
        System.out.println("Gefundene Buchstabenfolgen:");
        for (i=0;i<laengeText-5;i++)
        {   
            // Sucht nach gleichen Buchstabenfolgen der Länge 3
            if ((text[i]+text[i+1]+text[i+2])==(text[i+3]+text[i+4]+text[i+5]))           
            {
                System.out.println("Folge: " + text[i]+text[i+1]+text[i+2]);
               
            }          
            
        }
        
    }
```

Mit Char kann ich die Zeichenfolgen durch die for-Schleife um einer Schritt weiter führen (i); 
mit String funktioniert das bei mir allerdings nicht.

Kannst du mir noch mal helfen? Oder auch jemand anders?
Hab schon zich Möglichkeiten mit String ausprobiert. Ohne Erfolg.

Und leider funtioniert diese Variante nicht: ^^"

```
if ( teilString += text[i+1]+text[i+2] == teilString += text[i+3]+text[i+4])
```


----------



## madboy (23. Okt 2007)

Böse:

```
if ( teilString += text[i+1]+text[i+2] == teilString += text[i+3]+text[i+4])
```

Gut:

```
if ( (teilString += text[i+1]+text[i+2]).equals(teilString += text[i+3]+text[i+4]))
```


----------



## wayne (24. Okt 2007)

ok, verstehe was du machen willst. es soll also eine zeichenfolge der länge 3 gesucht werden, die doppelt vorkommt. das ist nicht wirklich so problematisch:

```
String zeichenfolge = new String("MEINE KLEINE");
for( int i = 0; i < zeichenfolge.length() - 6; i++ )
    for( int j = i+3; j < zeichenfolge.length()-3;j++)
        if( zeichenfolge.substring(i,i+3).equalsIgnoreCase(zeichenfolge.substring(j,j+3)) ){
            System.out.println("Folge: "+zeichenfolge.substring(i,i+3));
            return;
        }
System.out.println("keine Folge gefunden");
```
das hier sollte es tun (hab's aber net getestet, sondern grad mal hier aufgesetzt). durch die methode equalsIgnoreCase(...) bleibt sogar die groß-/kleinschreibung unbeachtet. wenn dir das aber wichtig wäre, dann ersetze diese methode einfach durch equals(...). 

übrigends kannst du strings, ausser über die methode substring(...), welche dir teile des Strings zurückgibt, auch über die methode charAt(...) zeichenweise abgehen und so dann auch wieder auf einzelne characters kommen.

viel erfolg

wayne


----------



## Feder (24. Okt 2007)

Danke nochmal allen.  :wink: 

Und danke Wayne, deine Vorgehensweise erleichtert die Arbeit ungemein.
Ich habe mit meiner Variante richtig zu tun gehabt und hatte ständig nicht das Ergebnis, 
was ich erreichen wollte. Mit substring zu arbeiten ist echt klasse.


----------

