# Probleme auf Objekte ohne Namen zuzugreifen



## André99 (9. Jan 2020)

Hey, als Übung soll ich ein simples Buchungssystem für Busfahrkarten implementieren. Dabei speichere ich Busrouten als Objekte und lege sie in einer ArrayList ab. Das ablegen in der ArrayList tue ich mittels der Methode "add". Es gibt auch noch eine andere Methode "remove". Diese entfernt Busrouten aus der Liste. Jedoch habe ich ein kleines Problem dabei, da ich ohne Name nicht ein spezifisches Objekt zugreifen kann. Da die Anzahl der Routen unbekannt ist, kann ich auch nicht einfach so eine bestimmte Anzahl an Objekten erzeugen. Als Attribut für ein Objekt gibt es die "Busnummern". Ich habe einen Iterator implementiert der durch die ArrayList iterieren soll, und dabei die Busnummern vergleichen soll, da vorgegeben ist, dass jede Route nur von einem Bus mit einer bestimmten Nummer gefahren wird. Jedoch habe ich auch da Probleme dies umzusetzen. Gibt es vielleicht auch eine Möglichkeit, dass ich meiner Methode "remove" ein Objekt als Parameter übergebe und den Inhalt dieses Objekts mit den Inhakten der Objekte in der ArrayList vergleiche? Ein zweites Problem, dass aufgetreten ist, ist das ich in einer dritten Methode "listroute" alle Routen in meiner ArrayList ausgeben soll. Jedoch wird nur das letzte gespeichert Objekt ausgegeben und zwar so oft, wie Objekte in der ArrayList sind. Zu Guter Letzt musste ich alles static machen, damit ich in der UI Klasse auf meine Methoden zugreifen kann. Ich bin noch ziemlich neu, was programmieren angeht und würde mich über Hilfe und Verbesserungsvorschläge freuen. Hier ist der Code, den ich bis jetzt schon habe:

import java.util.ArrayList;
import java.util.Iterator;
public class Booking {

  static int busNumber;
  static int customerID = 1; // Kundennummmer fängt bei 1 an.
  static String name;
  static double price;
  static int invoiceNumber = 1; // Rechnungsnummer fängt auch bei 1 an.
  static String start;
  static String destination;
  static Currency currency;

  static ArrayList<Booking> bookable = new ArrayList<Booking>(); // Meine arraylist.

  public Booking(int busNumber, String start, String destination, double price, Currency currency) { // Konstruktor
    this.busNumber = busNumber;
    this.start = start;
    this.destination = destination;
    this.price = price;
    this.currency = currency; // Ein Enum-Wert
    this.customerID++;
  }

  public int getBusNumber() {
    return busNumber;
  }

  public static void add(Booking add) {
    bookable.add(add);
  }

  public static void remove(int busNumber) {  //Hier die erste Methode, mit meinen kläglichen Versuchen... Iteriert momentan noch nicht.
    Iterator<Booking> it = bookable.iterator();
    if ( == busNumber) {
      bookable.remove(it);
    }
  }

  public static void listRoute() {  //Meine print-Methode übergibt das Objekt element an die toString Methode
    for (Booking element : bookable) {
      Terminal.printLine(toString(element)); //Terminal.printline ersetzt Syso
    }
  }

  public static String toString(Booking element) {
    return "000" + busNumber + " " + start + " " + destination + " " + price + " " + currency;
  }
}

Hier ist meine Klasse die später zum UI werden soll. Habe testweise ein paar Objekte angelegt: 

public class Input {

  public static void main(String[] args) {
    Booking.add(new Booking(1, "Mannheim", "Karlsruhe", 2.05, Currency.EUR));
    Booking.add(new Booking(2, "Heidelberg", "Karlsruhe", 3.05, Currency.JPY));
    Booking.add(new Booking(3, "Germersheim", "Karlsruhe", 4.05, Currency.USD));
    Booking.listRoute();
  }
}

Die Ausgabe ist folgende:  0003, "Germersheim", "Karlsruhe", 4.05, Currency.USD      und das drei mal..


----------



## Javinner (9. Jan 2020)

Hier wird dein Dilemma besprochen


----------



## André99 (10. Jan 2020)

Javinner hat gesagt.:


> Hier wird dein Dilemma besprochen


Danke  Der scheint  im gleichen Kurs wie ich zu sein xD


----------



## krgewb (10. Jan 2020)

Bitte immer in Code-Tags posten.

```
import java.util.ArrayList;
import java.util.Iterator;

public class Booking {

    static int busNumber;
    static int customerID = 1; // Kundennummmer fängt bei 1 an.
    static String name;
    static double price;
    static int invoiceNumber = 1; // Rechnungsnummer fängt auch bei 1 an.
    static String start;
    static String destination;
    static Currency currency;

    static ArrayList<Booking> bookable = new ArrayList<Booking>(); // Meine arraylist.

    public Booking(int busNumber, String start, String destination, double price, Currency currency) { // Konstruktor
        this.busNumber = busNumber;
        this.start = start;
        this.destination = destination;
        this.price = price;
        this.currency = currency; // Ein Enum-Wert
        this.customerID++;
    }

    public int getBusNumber() {
        return busNumber;
    }

    public static void add(Booking add) {
        bookable.add(add);
    }

    public static void remove(int busNumber) { //Hier die erste Methode, mit meinen kläglichen Versuchen... Iteriert momentan noch nicht.
        Iterator<Booking> it = bookable.iterator();
        if ( == busNumber) {
            bookable.remove(it);
        }
    }

    public static void listRoute() { //Meine print-Methode übergibt das Objekt element an die toString Methode
        for (Booking element : bookable) {
            Terminal.printLine(toString(element)); //Terminal.printline ersetzt Syso
        }
    }

    public static String toString(Booking element) {
        return "000" + busNumber + " " + start + " " + destination + " " + price + " " + currency;
    }
}
```


```
public class Input {

    public static void main(String[] args) {
        Booking.add(new Booking(1, "Mannheim", "Karlsruhe", 2.05, Currency.EUR));
        Booking.add(new Booking(2, "Heidelberg", "Karlsruhe", 3.05, Currency.JPY));
        Booking.add(new Booking(3, "Germersheim", "Karlsruhe", 4.05, Currency.USD));
        Booking.listRoute();
    }
}
```


----------

