Anfängerproblem, Durchsuchen eines Arreys

Jonidas

Grünschnabel
Guten Tag,
ich bin noch totaler Java-Anfänger und hab ein kleines Problem:
Ich habe eine Javaprogramm geschrieben, welches verschiedene Objekte, der Klasse "Fahrtziele" aufnimmt. Diese bestehen immer aus einem Zielort und dem Preis für die Fahrt. Soweit funktioniert das auch alles. Nun möchte ich aber gerne eine Methode haben, welche das Arrey sucht. Also als Parameter einen Zielbahnhof hat, welcher dann mit allen anderen Zielbahnhöfen verglichen wird. Sobald einen kongruents festgestellt wird, soll die Methode den Preis, welcher zum eingegebenen Zielbahnhof gehört ausgeben. Mir ist klar, dass man hier vermutlich eine Kombination aus while und if machen muss. Leider kenne ich die Syntax noch nicht gut genug. Auf deutsch müsste es lauten:
Schaue dir den Zielbahnhof an erster Stelle an und vergleiche ihn mit dem Eingegebenen.
Wenn sie übereinstimmen gebe den Preis aus.
Wenn nicht schaue an die ncähste Position.


Code:
public class Zielfeld
{
    public int groesse;
    private fahrtziele[] meinZielfeld;
    public int index;
    public Zielfeld(int groesse)
    {
        this.meinZielfeld = new fahrtziele[groesse];
    }
    
    public void addFahrtziel(int index, fahrtziele diesesFahrtziel)
    {
        this.meinZielfeld[index] = diesesFahrtziel;
    }
    public void eraseFahrtziel(int index)
    {
        this.meinZielfeld[index] = null;
    }
    
    public String getName(int index)
    {
        return this.meinZielfeld[index].ziel;
    }
    
    public int getPreis(int index)
    {
        return this.meinZielfeld[index].preis;
    }
    
}

Code:
public class fahrtziele
{
    public String ziel;
    public int preis;

    public fahrtziele(String ziel, int preis)
    {
    }

}

Wäre sehr froh wenn mir jemand helfen kann.

Jonas


***Edit***
Mein erster Versuch. Ist aber leider scheinbar zimlicher Mist:
Code:
    public String searchWithName(String Name, int index)
    {
        if (name = this.getName(index))
        {
            return this.getPreis(index);
        }
        else (name = this.getName(new index = index+1);
    }
 
Zuletzt bearbeitet:
Original geschrieben von Jonidas
Guten Tag,
ich bin noch totaler Java-Anfänger und hab ein kleines Problem:
Ich habe eine Javaprogramm geschrieben, welches verschiedene Objekte, der Klasse "Fahrtziele" aufnimmt. Diese bestehen immer aus einem Zielort und dem Preis für die Fahrt. Soweit funktioniert das auch alles. Nun möchte ich aber gerne eine Methode haben, welche das Arrey sucht. Also als Parameter einen Zielbahnhof hat, welcher dann mit allen anderen Zielbahnhöfen verglichen wird. Sobald einen kongruents festgestellt wird, soll die Methode den Preis, welcher zum eingegebenen Zielbahnhof gehört ausgeben. Mir ist klar, dass man hier vermutlich eine Kombination aus while und if machen muss. Leider kenne ich die Syntax noch nicht gut genug. Auf deutsch müsste es lauten:
Schaue dir den Zielbahnhof an erster Stelle an und vergleiche ihn mit dem Eingegebenen.
Wenn sie übereinstimmen gebe den Preis aus.
Wenn nicht schaue an die ncähste Position.

-----Quellcode-----

-----Zielfeld-----

public class Zielfeld
{
public int groesse;
private fahrtziele[] meinZielfeld;
public int index;
public Zielfeld(int groesse)
{
this.meinZielfeld = new fahrtziele[groesse];
}

public void addFahrtziel(int index, fahrtziele diesesFahrtziel)
{
this.meinZielfeld[index] = diesesFahrtziel;
}
public void eraseFahrtziel(int index)
{
this.meinZielfeld[index] = null;
}

public String getName(int index)
{
return this.meinZielfeld[index].ziel;
}

public int getPreis(int index)
{
return this.meinZielfeld[index].preis;
}

}

-----Fahrtziele-----

public class fahrtziele
{
public String ziel;
public int preis;

public fahrtziele(String ziel, int preis)
{
}

}

Wäre sehr froh wenn mir jemand helfen kann.

Jonas


***Edit***
Mein erster Versuch. Ist aber leider scheinbar zimlicher Mist:

public String searchWithName(String Name, int index)
{
if (name = this.getName(index))
{
return this.getPreis(index);
}
else (name = this.getName(new index = index+1);
}

Soweit ich das sehe, machst Du diese Fehler:
1. Du liest das Array der Fahrtziele nicht aus
2. Du vergleichst die Strings mit =
3. Du legst keine Objekte der Fahrtziele an (new fahrtziele("BO", 0) o.ä.)
4. Du füllst das Arry der Fahrtziele gar nicht.

Lösung für 1+2, hoffe Du kannst 3+4 dann selbst lösen:
Code:
public int searchWithName(String name)
{
  if ( fahrtziele != null )
{
  for ( int i = 0; i < fahrtziele.length; i++ )
  {
        String tempString = meinZielfeld[ i ].getName();
        if (tempString != null && name.equals(tempString))
        {
            return meinZielfeld[ i ].getPreis();
        }
    }
  }
  return -1; // Als Fehlercode, dass der Eintrag nicht gefunden wurde
}

public class fahrtziele
{
    private String ziel;
    private int preis;

    public fahrtziele(String ziel, int preis)
    {
       this.ziel = ziel;
       this.preis = preis;
    }
    public String getName()
    {
      return ziel;
    }
    public int getPreis()
    {
      return preis;
    }
}

Noch was:
Üblicherweise beginnen Klassennamen mit einem Großbuchstaben.
Und Zugriffe auf Instanzvariablen von ausserhalb werden üblicherweise nicht direkt durchgeführt, indem public Variablen angelegt werden, sondern per get...(), s.o. in meinem Beispiel.
D.h. das hier:
Code:
    public String getName(int index)
    {
        return this.meinZielfeld[index].ziel;
    }
    
    public int getPreis(int index)
    {
        return this.meinZielfeld[index].preis;
    }
ist ein no-no und sollte tunlichst vermieden werden.
Ich sehe gerade, da steckt auch eine potentielle NullPointerException drin:
return this.meinZielfeld[index].ziel;
Angenommen, this.meinZielfeld[index] gibt es gar nicht, dann fliegt eine (vermeidbare) NullPointerException.
 
Jo vielen Dank. Hab das nen bischen geändert. So geht es nicht. Ka warum. Musste "fahrtziele" in der search-Methode mit "meinZielfeld" ersetzen... Das mit dem Felder füllen löse ich mit BlueJ. Ich weiß nicht ob das jemand kennt. Da kann man das alles machen. Weiß vieleicht auch noch jemand wie ich den "int"-Wert in einen String als ausgabewert beim 2ten return gibt. Möchte nicht, dass da "-1" steht. Oder geht das in Java nicht?
 
Zuletzt bearbeitet:
Original geschrieben von Jonidas
Weiß vieleicht auch noch jemand wie ich den "int"-Wert in einen String als ausgabewert beim 2ten return gibt. Möchte nicht, dass da "-1" steht. Oder geht das in Java nicht?

Nicht wenn der Rückgabetyp ein int ist.
 
Zurück