Frage von Joneyf, 83

Initiiere ich hier meinem Array die richtigen Daten?

Folgendes Programm habe ich geschrieben (1.Klasse)

public class Haltestelle
{
private String ort;
private int Streckenkilometer;

public Haltestelle(String pOrt,
    int pStreckenkilometer) /**
                 * Ort und Streckenkilometer bekommen
                 * feste Werte
                 */
{
ort = pOrt;
Streckenkilometer = pStreckenkilometer;
switch (Streckenkilometer)
{
    case 0:
    ort = "Tübingen";
    break;
    case 26:
    ort = "Hechingen";
    break;
    case 38:
    ort = "Balingen";
    break;
    case 57:
    ort = "Albstadt";
    break;
    case 82:
    ort = "Sigmaringen";
    break;
    default:
    break;
}
}

public String liesOrt()
{
return ort;
}

public int liesStreckenkilometer()
{
return Streckenkilometer;
}

}

Ich möchte mich hierbei auf den Array private Haltestelle[] dieHaltestellen; konzentrieren. Ich möchte nur wissen ob ich auch meine Daten in den Array initiiert habe, falls nein helft mir bitte weiter.

private Haltestelle[] dieHaltestelle;

public Fahrt()

{

Haltestelle[] dieHaltestelle = new Haltestelle[5];

}

Antwort
von triopasi, 35

Da sind einige Fehler drin...

1. Warum as SWITCH, wenn Ort und km sowieso übergeben werden???

2. Allgemein gilt: Englisch benutzen!!

3. Variablennamen klein, Klassennamen groß, das macht man in Java halt so!

Kommentar von Joneyf ,

2. Ist Pflicht bei unserem Lehrer, aber danke haben mir schon viele gesagt

3. Ist mir auch schon bekannt

Zu Fehler 1, weil es ein Versuch war, ich habe in der Unterrichtsstunde gefehlt bei der wir Arrays behandelt haben deswegen wusste ich nicht wie ich vorrangehen soll

Kommentar von triopasi ,

Typisch Lehrer, keine Ahnung von nix, aber naja, dann ist's nicht deine Schuld.

Mit

Haltestelle[] dieHaltestelle = new Haltestelle[5];

erstellst du ein Array aus "Haltestelle"-Datentypen, wobei aber keine Werte im Array gespeichert werden. dieHaltestelle[0] ... dieHaltestellt[5] ist alles noch null.

Kannst die mit

dieHaltestelle[0] = new Haltestelle(..);

initialisieren.

Kommentar von Eddex ,

Das ganze ist für mich ziemlich mühsam..

Ich hoffe euer Lehrer hat euch gezeigt wie man ein Programm debugt. Probier das mal. Ansonsten google mal "How to debug in Eclipse" oder so was. Schönen Abend noch. :)

Kommentar von Joneyf ,

Dir auch noch einen schönen Abend

Kommentar von Joneyf ,

Hab den Fehler gefunden, falls es euch interessiert kann ich ja zurückschreiben

Antwort
von Eddex, 30

Du instanzierst das Array 'dieHaltestelle' zwar im Konstruktor der Klasse 'Fahrt', aber befüllst es nicht mit Haltestellen. Es ist also leer.

public Fahrt() { 
  Haltestelle[] dieHaltestelle = new Haltestelle[5];
}

Wenn du also dieHaltestelle[i] aufrufst, wird immer 'null' zurückgegeben. Um dies zu ändern musst du das Array befüllen. Hier ein Beispiel:

public Fahrt() { 
  Haltestelle[] dieHaltestelle = new Haltestelle[5]; dieHaltestelle[0] = new Haltestelle("ort1", 12); dieHaltestelle[1] = new Haltestelle("ort2", 14); ...
}

Hoffe das hilft. :)

Kommentar von Joneyf ,

Oh mein Gott, vielen dank ich hab auf zig Foren schon nach Antworten gesucht aber nichts hat mir geholfen. Wirklich vielen dank!

Kommentar von Eddex ,

Den switch in der Klasse 'Haltestelle' brauchst du dann auch nicht mehr.

Kommentar von Joneyf ,

Aber bringt mir dann die Klasse Haltestelle überhaupt was?

Kommentar von Eddex ,

Ja, weil du ja verschiedene Haltestellen haben willst. Du kannst dann in der Abfrage zum Beispiel so was machen:

public int BerechneStrecke(string ort1, string ort2) {
  int distanz1;
  int distanz2;
  for(i = 0; i < dieHaltestellen.length; i++) {
    if(dieHaltestellen[i].liesOrt() == ort1) {
      distanz1 = dieHaltestellen[i].liesStreckenkilometer();
    }
    if(dieHaltestellen[i].liesOrt() == ort2) {

distanz2 = dieHaltestellen[i].liesStreckenkilometer();
} } return distanz1 - distanz2; }
Kommentar von Joneyf ,

Die Streckenkilometer dürfen aber nicht aus der Klasse Haltestelle genommen werden, dafür habe ich diese Methode angelegt:

private int liesStreckenkilometerHaltestelle(String pHaltestelle)
{
int StreckenkilometerHaltestelle = 0;

for (int i = 0; i < dieHaltestellen.length; i++)
{

if (pHaltestelle.equals(dieHaltestellen[i]))
{
StreckenkilometerHaltestelle = i;
/** Sonst wird die Suche fortgesetzt! */
} /**
* In diesem Quellcode wird die Haltestelle mit dem vom
* Benutzer eingegebenen Namen gesucht und deren Name
* und Streckenkilometer ausgegeben.
*/

}
return StreckenkilometerHaltestelle;
}
Kommentar von Eddex ,

In deinem Beispiel setzt du die variabel 'StreckenkilometerHaltestelle' auf den Index des Arrays. Also 0 bis 4. Wenn das die gewünschte Lösung ist, dann ist es nicht nötig, den Streckenkilometer in der Klasse 'Haltestelle' zu haben.

Kommentar von Joneyf ,

Ja aber hierbei ist das Problem, das diese Methode verwendet werden MUSS. Ich kann dir das Arbeitsblatt abschreiben und schicken.

Kommentar von Eddex ,

Ich denke das ist, was du brauchst:

private int liesStreckenkilometerHaltestelle(String pHaltestelle)
{
int StreckenkilometerHaltestelle = 0;

for (int i = 0; i < dieHaltestellen.length; i++)
{
if (pHaltestelle.equals(dieHaltestellen[i].liesOrt()))
{
StreckenkilometerHaltestelle = dieHaltestellen[i].liesStreckenkilometer;
/** Sonst wird die Suche fortgesetzt! */
}
}
return StreckenkilometerHaltestelle;
}



Kommentar von Joneyf ,

Aber dann finde ich ja immer noch nicht meinen Fehler, immer wenn ich die Konsole ausführen möchte kommt der Fehler

Exception in thread "main" java.lang.NullPointerException
at fachkonzept.Fahrt.berechneEntfernung(Fahrt.java:40)
at benutzerschnittstelle.Konsole.main(Konsole.java:24)

Kommentar von Eddex ,

da kann ich dir nicht weiter helfen, ohne den Code zu sehen. Überprüfe einfach noch mal ob die das Array auch wirklich befüllt hast. Mehr kann ich nicht sagen.

Kommentar von Joneyf ,

https://codeshare.io/IX5PC Also das ist das ganze Programm, hoffe du musst dich nicht registrieren um es dir anzuschauen

Kommentar von Eddex ,

Das Problem ist, dass die Abfrage, ob die Haltestelle gleich der eingegebenen Haltestelle ist, nie funktionieren wird.

if (dieHaltestellen[O].liesOrt() == pVonHaltestelle)

Du musst die .equals() Methode verwenden anstelle von ==.

http://stackoverflow.com/questions/767372/java-string-equals-versus

Kommentar von Joneyf ,

Aber der Fehlercode ist immernoch der Selbe

Ich habe es jetzt so abgeändert:

if (pVonHaltestelle.equals(dieHaltestellen[O]))
{
VonHaltestelle = dieHaltestellen[O].liesStreckenkilometer();
}

if (pNachHaltestelle.equals(dieHaltestellen[O]))
{

NachHaltestelle = dieHaltestellen[O].liesStreckenkilometer();

}
Kommentar von Eddex ,
if (pVonHaltestelle.equals(dieHaltestellen[O].liesOrt()))

{...

sonst vergleichst du den Namen 'pVonHaltestelle' mit dem Objekt im Array 'dieHaltestelle' an Position 'O'

(Allgemein würde ich immer ein kleines i verwenden und nicht ein grosses O)

Kommentar von Joneyf ,

Oh ja, hoffe das es so nun richtig ist, aber Eclipse zeigt mir immernoch den gleichen Fehlercode an:

Exception in thread "main" java.lang.NullPointerException
at fachkonzept.Fahrt.berechneEntfernung(Fahrt.java:41)
at benutzerschnittstelle.Konsole.main(Konsole.java:24)

if (pVonHaltestelle.equals(dieHaltestellen[O].liesOrt()))

{
VonHaltestelle = dieHaltestellen[O].liesStreckenkilometer();
}

if (pNachHaltestelle.equals(dieHaltestellen[O].liesOrt()))

{

NachHaltestelle = dieHaltestellen[O].liesStreckenkilometer();

}
}

Keine passende Antwort gefunden?

Fragen Sie die Community