# Zwei Wortendungen vergleichen ohne .equals



## thomashuuu (22. Nov 2013)

Hallo, ich möchte gerne letzten n buchstaben von zwei wörtern vergleichen und als rückgabewert true haben, falls sie identisch sind. andernfalls false. Problem, ich darf keine Stringmethoden verwenden, außer .length und charAt.
so sieht es bisher aus:

private static boolean vergleicheEnd(String wort1, String wort2, int n){
	for(int i=0; i> ((wort1.length())-n); i--){
            for(int j=0; j>((wort2.length())-n); j--)
	  if(word1.charAt(i)== word2.charAt(j)) 
		  return true; 
	  else{
		  return false;
	  }

jedoch funktioniert es nicht. Die überlegung war, die wörter von hinten bis zur Stelle n zu durchlaufen und jeden Buchstaben einzeln zu vergleichen. Allerdings weiß ich nicht wie ich sowas mache. Kann mir jemand helfen?
Vielen Dank, Thomas


----------



## Gucky (22. Nov 2013)

Benutze bitte nächstes Mal die Java Tags für deinen Java-Code.

Soll auch nachgeprüft werden, ob die Wörter gleich lang sind? Wenn nein, wird das Ganze leichter.


----------



## thomashuuu (22. Nov 2013)

ok, werd ich machen 
nein, die WÖrter können unterschiedlich lang sein, lediglich Endung mit einer Länge von n Buchstaben der Strings wort1 und wort2 sollen überprüft werden.


----------



## Gucky (22. Nov 2013)

Ok.

Dann guckst du erst nach, ob die Wörter überhaupt n lang sind. Wenn mindestens eines nicht, gibst du 
	
	
	
	





```
false
```
 zurück.
Dann guckst du die Differenz der beiden nach und speicherst diese.
Dann machst du eine Schleife, deren Kopf so aussieht: 
	
	
	
	





```
for (int i=[längeresWort].length;i>[längeresWort].length-n;i--)
```
In diese Schleife kommt ein if, das nachguckt, ob an der Stelle n beim größeren Wort und an der Stelle n-Differenz beim kleineren Wort derselbe char steht. Wenn nicht, dann gibst du false zurück. Hinter den Rumpf der Schleife kommt die Rückgabe von true hin, da eine Methode sofort verlassen wird, sollte ein return [irgendwas oder leer]; dort stehen.


----------



## HarleyDavidson (22. Nov 2013)

Ohne die Länge beider Wörter zu prüfen könnte man die Funktion so ganz schlank schreiben:


```
private static boolean vergleicheEnd( String wort1, String wort2, int n )
    {
        for ( int i = 0; i < n; i++ )
        {
            if ( wort1.charAt( (wort1.length()-1) - i ) != wort2.charAt( (wort2.length()-1) - i ) )
            {
                return false;
            }
        }
        return true;
    }
```


----------



## thomashuuu (24. Nov 2013)

```
private static boolean suffixEqual(String word1, String word2, int n){
	if(n > word1.length() || n > word2.length()){
		return false;}
	String bigWord ="";
	String shortWord ="";
	int a = bigWord.length() - shortWord.length();{
	if (word1.length() > word2.length()){
		bigWord = word1;
		shortWord = word2;}
		else {
			bigWord = word2;
			shortWord = word1;}}  
     for (int i = bigWord.length(); i > bigWord.length()-n; i--);{
            if (bigWord.charAt(n) != shortWord.charAt(n-a)){
             return false;}  
        return false;
    }}
```

das hab ich bisher gemacht, aber als Fehlermeldung kommt
 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
	at java.lang.String.charAt(Unknown Source)
	at Document.suffixEqual(Document.java:146)  

 ------das entspricht dieser zeile: if (bigWord.charAt(n) != shortWord.charAt(n-a)){

was mach ich falsch?


----------



## Gucky (24. Nov 2013)

Du hast ein langes und ein kurzes Wort. In der Schleife versuchst du auf den Index langesWort.length des kurzen Wortes zuzugreifen. Diesen Index hast du aber nicht, da das lange Wort länger ist als das kurze.


----------



## thomashuuu (24. Nov 2013)

wo genau meinst du? bzw wie änder ich das denn?
danke schonmal!


----------



## Natac (25. Nov 2013)

HarleyDavidson hat gesagt.:


> Ohne die Länge beider Wörter zu prüfen könnte man die Funktion so ganz schlank schreiben:
> 
> 
> ```
> ...


Als ob es MIT Überprüfung sehr viel Umständlicher wäre:


```
private static boolean vergleicheEnd( String wort1, String wort2, int n )
    {
        if(wort1.length() < n || wort2.length() < n)
        {
            return false;
        }

        for ( int i = 0; i < n; i++ )
        {
            if ( wort1.charAt( (wort1.length()-1) - i ) != wort2.charAt( (wort2.length()-1) - i ) )
            {
                return false;
            }
        }
        return true;
    }
```


----------



## HarleyDavidson (25. Nov 2013)

Natac hat gesagt.:


> Als ob es MIT Überprüfung sehr viel Umständlicher wäre:



Habe ich nie behauptet  Wollte dem OP lediglich einen Hinweis für seine Lösung zeigen. :toll:


----------



## Natac (25. Nov 2013)

Okay... da habe ich deinem Post wohl einen falschen Tonfall unterstellt. 

Naja, zumindest kann der TO jetzt überlegen, warum diese Lösung funktioniert.


----------

