# Probleme Methoden einer anderen Klasse aufzurufen



## André99 (11. Jan 2020)

Hey, ich habe eine Klasse geschrieben und möchte nun die Methoden dieser Klasse in einer anderen aufrufen, jedoch tue ich mich daran etwas schwer. Meine Methoden sind Objektmethoden und deswegen non-static somit kann ich nicht einfach den Klassennamen nehmen und mit Klassenname. die Methoden aufrufen. Auch kann ich kein Objekt der Klasse in meiner zweiten Klasse erstellen und damit die Methoden aufrufen. Könnte mir dabei jemand weiterhelfen. Nur zur Info: Ich mache das Programm anhand einer Aufgabe und manche meiner Methoden sind noch nicht ganz fertig.


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

public class Booking {

  private int busNumber;
  private int customerID;
  private double price;
  private int invoiceNumber;
  private String start;
  private String destination;
  private String name;
  private Currency currency;

  public Booking(int busNumber, String start, String destination, double price,
          Currency currency) {
    this.busNumber = busNumber;
    this.start = start;
    this.destination = destination;
    this.price = price;
    this.currency = currency;
  }

  public Booking(int invoiceNumber, int busNumber, String name) {
    this.name = name;
    this.invoiceNumber = invoiceNumber;
    this.busNumber = busNumber;
  }

  private List<Booking> bookable = new ArrayList<>();

  private List<Booking> bookings = new ArrayList<>();

  public int getBusNumber() {
    return this.busNumber;
  }

  public int getCustomerID() {
    this.customerID++;
    return this.customerID;
  }

  public int getCustomerIDwOAdding() {
    return this.customerID;
  }

  public int getInvoiceNumber() {
    this.invoiceNumber++;
    return this.invoiceNumber;
  }

  public void add(int busNumber, String start, String destination, double price,
          Currency currency) {
    bookable.add(new Booking(busNumber, start, destination, price, currency));
  }

  public void remove(int busNumber) {
    final Iterator<Booking> iterator = bookable.iterator();
    while (iterator.hasNext()) {
      Booking element = iterator.next();
      if (element.getBusNumber() == this.busNumber) {
        bookable.remove(element);
      }
    }
  }

  public void listRoute() {
    try {
      bookable.sort(Comparator.comparingInt(Booking::getBusNumber));
      if (bookable.size() >= 1) {
        for (Booking element : bookable) {
          Terminal.printLine(toString(element));
        }
      }
    } catch (NullPointerException e) {
      Terminal.printLine("Error, no bus routes avaible!");
    }
  }

  public void book(int busNumber, String name) {
    bookings.add(new Booking(getInvoiceNumber(), busNumber, name));
  }

  public void listBookings() {
    try {
      bookings.sort(Comparator.comparingInt(Booking::getCustomerIDwOAdding));
      if (bookings.size() >= 1) {
        for (Booking element : bookings) {
          Terminal.printLine(toString(element));
        }
      }
    } catch (NullPointerException e) {
      Terminal.printLine("Error, no bus routes avaible!");
    }
  }

  public String toString(Booking element) {
    if (element.getBusNumber() > 100 && element.getBusNumber() <= 1000) {
      return element.getBusNumber() + " " + start + " " + destination + " " + price + " "
          + currency;
    } else if (element.getBusNumber() > 10 && element.getBusNumber() <= 100) {
      return "0%d" + element.getBusNumber() + " " + start + " " + destination + " " + price + " "
          + currency;
    } else if (element.getBusNumber() >= 0 && element.getBusNumber() <= 10) {
      return "00%d" + element.getBusNumber() + " " + start + " " + destination + " " + price + " "
          + currency;
    } else {
      return "No bus routes yet, or requested bus number is higher then 1000!";
    }
  }
}
```

Und hier meine zweite Klasse mit der ich auf die Methoden von Booking zugreifen möchte. Ich nehme dafür Benutzereingaben entgegen. Und ja ich weiß, dass meine while schleife eine endlos - Schleife ist. Sie soll erst beenden, wenn die Eingabe "quit" lautet.


```
public class UI {
  public static void main(String[] args) {
    while (true) {
      String[] s = Terminal.readLine().split(" ");
      if (s[0].equals("add") && s.length == 6) {
        try {
         
        } catch (IllegalStateException e) {
          Terminal.printLine("Error, method/s can´t be invoked with the current input!");
        }
      }
    }
  }
}
```

Ich weiß im vorher nicht wie viele Objekte erzeugt werden. Außerdem bin ich noch nicht ganz sicher, was das Exception handling angeht. Wo fehlt da noch was und welche Exceptions müssen aufgefangen werden?


----------



## mihe7 (11. Jan 2020)

Das Problem ist, dass Du versuchst, mit Booking mehre Fliegen mit einer Klappe zu schlagen. Du musst Buchung und Buchungssystem voneinander trennen, dann wir ein Schuh draus.


----------

