# return bricht methode nicht ab



## JAVAFFM (2. Feb 2010)

Hallo liebe JAVA-Gemeinde,

habe folgendes Problem. 
Ich dachte bisher, dass nach einem Aufruf von return, eine Methode den angegeben Wert zurückgibt, und die Methode abbricht. Bei einer meiner Methoden ist dies aber nicht der Fall.
ich habe ein Array mit Datumswerten, und habe eine Methode geschrieben, die zu einem Datum den gesuchten Index findet, zuerst habe ich sequentiell gesucht, also mit einer for-Schleife, die jedes elemt prüft, bis das Datum gefunden ist. Ich habe dann aber eine binäre Suche geschrieben.
die Daten sind chronologisch angeordnet, es gibt aber Lücken.
Die Methode sieht wie folgt aus:

```
public int getDateIndex(Date d){ 
  // in this.last ist das letzte Datum gespeichert
  if(d.after(this.last)) return this.date.length-1;// choosen Date is after last entry
  int low=0,
  high=this.c.length-1;
  while (low<=high){
   int j=new int;
   j=(low+high)/2;
   if (d==this.date[j]) return j;//Index element found at pos j
   if (d.after(this.date[j])){
    low=j+1;
   }
   else high=j-1;
  }
  // choosen Date is before first entry
  return -1;
 }
```

Wenn das Datum nach dem letzten Eintrag ist, wird der letzte Index geliefert, wenn es davor ist, soll -1 zurückgegeben werden.
leider wird immer -1 zurückgegeben.
Habe das PRoblem wie folgt gelöst:

```
public int getDateIndex(Date d){ 
  int j=-1;
  if(d.after(this.last)) j=this.date.length-1;// choosen Date is after last entry
  else {
   int low=0,
   high=this.c.length-1;
   while (low<=high){
    j=(low+high)/2;
    if (d==this.date[j]) break;//Index element found at pos j
    if (d.after(this.date[j])){
     low=j+1;
    }
    else high=j-1;
   }
  }
  // choosen Date is before first entry
  return j;
 }
```
Es geht mir also nicht primär um eine Lösung, sondern eher ums Verständnis.
Nach return sollte JAVA die Methode abbrechen, oder nicht?


----------



## eRaaaa (2. Feb 2010)

JAVAFFM hat gesagt.:


> Nach return sollte JAVA die Methode abbrechen, oder nicht?



Ja..biste dir denn sicher dass in deiner ersten Methode die if-Abfrage auch true liefert?
In der zweiten hast du ja auch nur ein return, welches ganz am Ende steht...?


----------



## Firestorm87 (2. Feb 2010)

Nach return bricht Java deine Methode ab 
Sollte Java das nicht tun, behaupte Ich mal ganz frech, wird das return nicht aufgerufen......

Und den Umstand hast du geprüft?


----------



## ARadauer (2. Feb 2010)

```
if (d==this.date[j]) return j;//
```
besser

```
if (d==this.date[j]){
System.out.println("ja ich bin drin");
return j;
}
```

== verlgeicht ob es die selben Objekte sind, aber nicht ob sie gleich sind.
versuchs mal mit equals


----------



## Michael... (2. Feb 2010)

Mir ist schleierhaft warum die zweite Variante funktionieren soll.

Aber ein Hinweis zu folgender Zeile:


JAVAFFM hat gesagt.:


> ```
> if (d==this.date[j]) [code=Java][/QUOTE]
> Objekte vergleicht man mit equals() und nicht mit ==
> [code=Java]if (d.equals(this.date[j])) return j;
> ```


----------



## Firestorm87 (2. Feb 2010)

Michael... hat gesagt.:


> Mir ist schleierhaft warum die zweite Variante funktionieren soll.


Das ist quasi ein Log um sicher zu stellen, dass das return auch wirklich aufgerufen wurde....


----------



## Michael... (2. Feb 2010)

Firestorm87 hat gesagt.:


> Das ist quasi ein Log um sicher zu stellen, dass das return auch wirklich aufgerufen wurde....


Bezog sich auf die zweite Code Variante von JAVAFFM ;-) da == nur funktioniert, wenn es sich tatsächlich um dieselben Objekte handelt.


----------



## JAVAFFM (3. Feb 2010)

Vielen Dank an alle.

es lag tatsächlich am equals.

Man lernt halt nie aus.


----------



## JAVAFFM (17. Feb 2010)

Hallo Gemeinde,

habe mit meiner Methode mal wieder ein Problem.
ich erhalte folgende Exception:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
und zwar in folgender Codezeile:

```
if (d.after(this.last))
```

aber:

```
System.out.print(this.last+""+d);
  if (d.after(this.last))
```
schreibt mir 2 gültige Daten auf die Console.
wenn also this.last und d gelesen und gschrieben werden können,
warum dann eine NULL Pointer Exception ne Zeile später??


----------



## Firestorm87 (17. Feb 2010)

Die Frage mag blöd klingen.... aber welche der beiden meldet denn den NullPointer?
Und wenn die Objekte existieren, versuch mal ob du auf d.getMillisOf() und this.last.getMillisOf() zugreifen kannst...

Denn diese werte vergleicht die after-methode.....

/EDIT: Die Methode dazu is statisch und dazu nichtmal public... man lesen bildet 
also: bleibt erstmal herauszufinden ob beide null sind und wie/wo diese instanziert werden


----------



## SlaterB (17. Feb 2010)

Error-Ausgaben können evtl. vor dem System.out-Ausgaben landen, da ist keine Reihenfolge gerantiert,
wenn das ganze mehrmals passiert siehts du vielleicht erst korrekte Ausgaben und dann die Exception von einem anderen Durchlauf

ideal wäre ein vollständiges kleines Testprogramm


----------



## JAVAFFM (17. Feb 2010)

@firestorm 
es meldet auch beim 2. beispiel die zeile mit dem vergleich den Fehler


----------



## Firestorm87 (17. Feb 2010)

JAVAFFM hat gesagt.:


> @firestorm
> es meldet auch beim 2. beispiel die zeile mit dem vergleich den Fehler



Ja aber welche der beide Variablen?
this.last? oder d? oder beide?

Und wo werden diese Variablen instanziert... ?
Kannst du das ganze auf ein paar Zeilen kürzen, so dass man das bei sich selber nachstellen könnte?


----------

