# Problem mit compareTo



## Kenny77 (12. Jun 2007)

Hallo an alle die das hier lesen!
Habe etwas Probleme mit meinem Projekt!
Es sieht folgendermaßen aus!
Es geht um eine Busfahrplan der eine Abfrage nach Ort und Zeit beinhaltet.
Fragen kommen unten!
Und noch ein fettes sorry aber ich kenn mich nicht mit dem BBCode-Tags aus. Hoff man kann es trotzdem lesen.


```
import java.util.*;
import java.awt.*;


public class Buslinie implements Comparable {
	
	int Nummer; 
		
	
	//Testarry deklariert
	String haltestellen [] = new String[4];{
	 haltestellen[0] = "Fh";
	 haltestellen[1] = "Kaserne";
	 haltestellen[2] = "Am Stocket";
	 haltestellen[3] = "Stadtmitte";
	 }
	//Testarray deklariert
	String[][] abfahrtszeiten = new String [4][2];{
	abfahrtszeiten[0][0]= "08.00";
	abfahrtszeiten[0][1]= "10.00";
	abfahrtszeiten[1][0]= "08.05";
	abfahrtszeiten[1][1]= "10.05";}
	

	int t=getNummer();

	//Abfrage namens abfrage1 mit zwei String-Parametern und einem Stringrückgabetyp
	String abfrage1 (String h, String t){
		boolean gefunden = false;
		int i;
		
		//hier wird die Haltestelle herausgefunden
		for(i=0;i<haltestellen.length;i++){
			if (haltestellen[i].equals(h))
				gefunden = true;
			else break;
		}
		
	if (gefunden){
		int index;
		index=i;
		int j = 0;
		
		//hier wird zur Haltestelle die Abfahrtszeiten bestimmt
		for(j=0; j<abfahrtszeiten[index][j].length();j++){
			
                 //Ab hier ist mir nicht mehr klar wie ich das machen soll!!!
                    while(!(abfahrtszeiten[index][j].equals(t))){
				public Sting compareTo(t){
					HILFE!!!
				}
			}
			return abfahrtszeiten[index][j];
		}
	}
	

	


}
}
```

Also mein Problem ist das ich zu einem ausgewählten Abfahrtsort die Abfahrtszeiten ausgeben möchte!
Mir wurde das so erklärt ich sollte eine while-Schleife machen und ein compareTo.
Aber wenn ich Comparable implementiere muss ich ja die compareTo-Methode überschreiben oder?
Hatt vielleicht jemand ne Idee?
[/code]


----------



## Kenny77 (12. Jun 2007)

Ok des mit BBCode-Tags hat doch geklappt!
Die letzte while und das compareTo kommen so von mir. Stimmt aber nicht!
Bitte um vorschläge, ihr würdet mir wirklich sehr damit helfen!


----------



## SlaterB (12. Jun 2007)

für Comparable sehe ich wenig Sinn,
du willst doch nicht deine eigene Klasse selber vergleichen sondern nur bestimmte Strings im Array

ist t ein Zeitstring?
wahrscheinlich musst du nun 
abfahrtszeiten[index][j].compareTo(t)
ausführen, um die Abfahrtszeit(en) zu bestimmen, die vor oder nach t liegen?

--------

übrigens: nicht an die Umsetzung denken sondern erstmal klären, was überhaupt passieren soll!

> zu einem ausgewählten Abfahrtsort die Abfahrtszeiten ausgeben möchte

alle Abfahrtszeiten stehen in einem Array, du musst sie nur ausgeben, 
dazu bräuchstet du gar keinen Vergleich


----------



## Kenny77 (12. Jun 2007)

Ok falsche Fragestellung
Es wird der Abfahrtsort und die Zeit angegeben.
Wie z.B. ich stehe an einer Bushaltestelle und will sehen wann die nächsten Busse kommen.
Also muss er ja irgendwie erst die Zeit auch finden.
Das wollte ich mit compareTo machen. und hald so lange suchen bis die zeit nicht mehr kleiner ist!
Wie würde der Code dazu aussehen. Könnte jemand den kurz tippen?


----------



## Kenny77 (12. Jun 2007)

Ja t ist ein Zeitstring.
Wenn ich doch compareTo nutzen will muss ich doch Comparable implementieren.
Meinst du mit der Klasse vergleichen dass ich das Comparable nicht bei der Klasse hinschreiben sollte.
Wo dann?


----------



## SlaterB (12. Jun 2007)

zum 1. Post:

ne, den sollst ja du tippen 
string.compareTo(string) ist alles was du brauchst,

im Idealfall liefert das die unterschiedliche Zahlen je nach Zeit, 
so dass du den String mit der niedrigsten Abweichung nehmen kannst,

fallso immer nur -1, 0 oder +1 zurückgegeben wird (kleiner, gleich, größer)
dann musst du eben bei mehreren Kandidaten diese untereinander vergleichen

-------

zum 2. Post:

> Wenn ich doch compareTo nutzen will muss ich doch Comparable implementieren. 

wie gesagt: nur Strings vergleichen, da gibts da schon,
deine eigene Klasse brauchst du nicht vergleichen


----------



## Kenny77 (12. Jun 2007)

Danke.
D.h. ich muss gar kein Comparable implementieren, oder?
Aber irgendwie raff ich das immer noch nicht!
soll ich das compareTo in meine while Schleife packen?
Also while(abfahrtszeiten[index][j].compareTo(t)){
wie sieht dann ungefähr der rumpf aus?
}
Sorry aber ich weiß es wirklich nicht und in meinem Buch ist das auch so schlecht erklärt. zumindest für meinen fall.


----------



## SlaterB (12. Jun 2007)

das braucht man nix wissen, das ist reine Denkaufgabe:
* du hast in der Hand einen blauen Klotz einer Zahl drauf (z.B. 7)
* vor dir liegt eine Reihe roter Bauklötzchen mit verschiedenen Zahlen, z.B. 2, 5,6,20
* du hast die Fähigkeit, jeweils einen Klotz in jede Hand zu nehmen und deren beiden Zahlen zu vergleichen,

wie gehts du vor, um den roten Klotz mit der größten Zahl kleiner deiner 7 zu finden?

kannst du sowas auch nicht ohne ein Buch über Bauklötzchen-Vergleiche? 
das hat mit Programmieren erstmal wenig zu tun,
denke logisch nach was zu tun ist


----------



## Kenny77 (12. Jun 2007)

Das ist ja nicht mein Problem!
Aber wie geht das dann mit 1,0,-1
kannst du mir da nicht wenigstens ein Code-Beispiel geben!
Bitte ich bin schon voll am verzweifeln!
Und passt des jetzt überhaupt mit der while?
Das würd ja heißen tu etwas solange bis es übereinstimmt.


----------



## SlaterB (12. Jun 2007)

> Das ist ja nicht mein Problem! 

<-> 

> Und passt des jetzt überhaupt mit der while? 
> Das würd ja heißen tu etwas solange bis es übereinstimmt.

ist dir das Vorgehen nun klar oder nicht?..
du musst ja auf jeden Fall mal eine ganze Reihe Zeiten (Bauklötze) anschauen,
also ist eine Schleife nicht verkehrt, aber längst nicht alles


mich kannst du noch so bitten, 
auf ganz sture 'ich kann nix, bitte alles fertig geben'-Fragen reagiere ich umso allergischer 

stelle (vielleicht in einem neuen Topic) deine Frage zivilisiert freundlich und vollständig, 
dann machts vielelicht wer anders,



oder fange an selber zu überlegen,
ein sinnvoller erster Schritt wäre z.B., in einer Schleife das Array zu durchlaufen und nur jeweils
t, die ArrayZeit + den Vergleichs-int-Wert mit System.out.println auszugeben,
sowas übt schon ungemein,

in einem Schritt gleich die Lösung haben zu wollen kann ja nicht gut gehen, selbst wenn man es selber macht


----------



## Kenny77 (12. Jun 2007)

Mit "das ist ja nicht mein Problem" mein ich das mir das vorgehen im allgemeinen schon klar ist.
Nur wie ich es umsetze ist mir nicht klar!
Ich weiß schon dass, die einstellung ich kann nix nicht die richtige ist, jedoch brauch ich jetzt schon ewigkeiten um dieses kleine Problem zu bewältigen!
Ich versuchs nochmal bis heut abend dann stell ich nochmal fragen!
Bitte nicht böse sein.


----------

