Java - Allgemeine Fragen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • @Mr_Oizo
      Ich habe dir mal fix die Basis des Codes geschrieben. Es fehlen noch Sedan und Van, Kommentare über den Methoden, Klasse und Klassenmembern. Falls du Fragen zum Code hast oder nicht weißt, wie es weiter geht, sag Bescheid.

      Java-Quellcode: IVehicle.java

      1. package vehiclerental.vehicle;
      2. public interface IVehicle {
      3. public String getRegistrationPlate();
      4. public boolean checkDriverEligibility(int driverAge, String licenseType);
      5. public void addBookedDate(String date);
      6. public void removeBookedDate(String date);
      7. public boolean bookedOnDate(String date);
      8. public String[] getBookedDates();
      9. }


      Java-Quellcode: AbstractVehicle.java

      1. package vehiclerental.vehicle;
      2. import java.util.HashSet;
      3. import java.util.Set;
      4. public abstract class AbstractVehicle implements IVehicle {
      5. protected String registrationPlate;
      6. protected Set bookDates;
      7. public AbstractVehicle(String registrationPlate) {
      8. this.registrationPlate = registrationPlate;
      9. bookDates = new HashSet<>();
      10. }
      11. @Override
      12. public String getRegistrationPlate() {
      13. return registrationPlate;
      14. }
      15. @Override
      16. public void addBookedDate(String date) {
      17. bookDates.add(date);
      18. }
      19. @Override
      20. public void removeBookedDate(String date) {
      21. bookDates.remove(date);
      22. }
      23. @Override
      24. public boolean bookedOnDate(String date) {
      25. return bookDates.contains(date);
      26. }
      27. @Override
      28. public String[] getBookedDates() {
      29. return (String[]) bookDates.toArray();
      30. }
      31. }
      Alles anzeigen

      Java-Quellcode: Motorcycle.java

      1. package vehiclerental.vehicle;
      2. import java.util.Arrays;
      3. public class Motorcycle extends AbstractVehicle {
      4. protected int sideCarSeats;
      5. protected static final String[] allowedLicenseTypes = {"A"};
      6. public Motorcycle(String registrationPlate, int sideCarSeats) {
      7. super(registrationPlate);
      8. this.sideCarSeats = sideCarSeats;
      9. }
      10. @Override
      11. public boolean checkDriverEligibility(int driverAge, String licenseType) {
      12. return driverAge >= 24 && Arrays.asList(allowedLicenseTypes).contains(licenseType);
      13. }
      14. public int getSideCarSeats() {
      15. return sideCarSeats;
      16. }
      17. }
      Alles anzeigen
    • So nun kommen die ersten Probleme :D , bei der Erstellung der Klasse Sedan zeigt mir Eclipse an , dass bei
      super (registrationPlate); (The constructor AbstractVehicle(String) is undefined)
      und
      public boolean checkDriverEligibility(int driverAge, String licenseType) (The method checkDriverEligibility(int, String) of type Sedan must override or implement a supertype method) was nicht stimmt.
      Kann man also doch nicht so einfach machen, wie bei Motorcycle ?


      e: Bei Van akzeptiert er alles nach dem Muster von Motorcycle, bin verwirrt
      e2: Hab das Problem gelöst, Ursache weiß ich nicht, vielleicht die Klasse am falschen Ort erstellt?)
      e3: Problem doch nicht gelöst, habe nämlich erstmal eine Sedan2-Klasse angelegt Copy&Paste von Sedan gemacht - ging,
      aber als ich dann in Sedan und die Klasse in Sedan umbenannt habe, wieder die gleichen Fehler...

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Mr_Oizo ()

    • Java-Quellcode

      1. package vehiclerental.vehicle;
      2. import java.util.Arrays;
      3. public class Sedan extends AbstractVehicle {
      4. protected int Doors;
      5. protected static final String[] allowedLicenseTypes = {"B","BF17","BE","B96","C","C1","CE", "C1E"};
      6. public Sedan(String registrationPlate, int Doors) {
      7. super(registrationPlate);
      8. this.Doors = Doors;
      9. }
      10. @Override
      11. public boolean checkDriverEligibility(int driverAge, String licenseType) {
      12. return driverAge >= 18 && Arrays.asList(allowedLicenseTypes).contains(licenseType);
      13. }
      14. public int getDoors() {
      15. return Doors;
      16. }
      17. }
      Alles anzeigen
    • Sieht richtig aus. Probier mal Project -> Clean... Dateien an den richtigen Ort gespeichert?

      Zum Testen kannst du eine main Klasse hinzufügen und die starten.

      Quellcode

      1. public static void main(String[] args){
      2. Sedan myFirstSedan = new Sedan("PLATE", 12);
      3. System.out.print(myFirstSedan.getDoors());
      4. System.out.print(myFirstSedan.getRegistrationPlate());
      5. }
    • Aro schrieb:

      Muss nNen PrettyTreePrinter schreiben. Logik bereits fertig, sodass aus so einem InputFile
      1, ,U
      2,1,I
      3,2,1,2,3
      4,2,5,6,7
      5,1,U
      6,5,1
      7,5,7,8,9

      alle Daten richtig ausgelesen und berechnet werden.

      Jetzt halt noch die String - Formation machen.
      Überhaupt keine Lust dazu.
      Soll dann so aussehen:

      1 : U -> {1, 7, 8, 9}
      |
      +- 2 : I -> {}
      | |
      | +- 3 : {1, 2, 3} -> {1, 2, 3}
      | |
      | +- 4 : {5, 6, 7} -> {5, 6, 7}
      |
      +- 5 : U -> {1, 7, 8, 9}
      | |
      | +- 6 : {1} -> {1}
      | |
      | +- 7 : {7, 8, 9} -> {7, 8, 9}
      Update,:

      1 : U -> [1, 7, 8, 9]
      |
      +- 2 : I -> []
      |
      +- 3 : [1, 2, 3] -> [1, 2, 3]
      |
      +- 4 : [5, 6, 7] -> [5, 6, 7]

      +- 5 : U -> [1, 7, 8, 9]
      |
      +- 6 : [1] -> [1]
      |
      +- 7 : [7, 8, 9] -> [7, 8, 9]

      So schaut es atm aus. Komm gerade nicht darauf, wie ich das fixen kann, damit es genauso wie im Zitat aussieht.
      src

      Wollte es rekursiv von der 1. Node aus lösen. Nicht sicher, ob ich mir es damit nicht unnötig schwer gemacht hab.
      Der Parameter level ist jetzt gerade unbenutzt. Hatte damit schon rumprobiert um eben die verschiedenen Ebenen zu generieren, aber war mit dem Ergebnis nie zufrieden.

      Jemand irgendwelche Ideen oder Denkanstöße?
      Falls gewollt, kann ich auch den Link zum git-repo sharen.

      Java-Quellcode

      1. private String createString(Node node, String output, int level) {
      2. String prettyTree = output;
      3. LinkedList<Node> children = node.getChildren();
      4. switch (node.getOperator()) {
      5. case 'U':
      6. if (!node.isRoot()) {
      7. prettyTree += "+- ";
      8. }
      9. prettyTree += node.getID() + " : " + 'U' + " -> " + node.getComputedValues() + "\n|\n";
      10. for (Node child : children) {
      11. prettyTree = createString(child, prettyTree, level);
      12. }
      13. break;
      14. case 'I':
      15. if (!node.isRoot()) {
      16. prettyTree += "+- ";
      17. }
      18. prettyTree += node.getID() + " : " + 'I' + " -> " + node.getComputedValues() + "\n|\n";
      19. for (Node child : children) {
      20. prettyTree = createString(child, prettyTree, level);
      21. }
      22. break;
      23. default:
      24. prettyTree += "+- " + node.getID() + " : " + node.getValues() + " -> " + node.getComputedValues()+ "\n";
      25. if(!node.isLast()){
      26. prettyTree += "|\n";
      27. } else {
      28. prettyTree += "\n";
      29. }
      30. break;
      31. }
      32. return prettyTree;
      33. }
      Alles anzeigen

      "I'd only suggest that you try to understand other people. Try to learn empathy"
    • Das mit dem level klingt doch ganz vernünftig. Du startest bei einem level von 0 und immer am Anfang der Methode (vor dem Switch) gibst du level mal ein | aus und erhöhst im Anschluss level um 1. Im Switch Block musst du dann ebenfalls an der Stelle, an welcher du in jeder zweiten Zeile einen Strich ausgibst, pro level einen Strich mehr ausgeben. Das hätte dann folgende Ausgabe zur Folge:

      1 : U -> [1, 7, 8, 9]
      |
      |+- 2 : I -> []
      ||
      |+- 3 : [1, 2, 3] -> [1, 2, 3]
      ||
      |+- 4 : [5, 6, 7] -> [5, 6, 7]
      |
      +- 5 : U -> [1, 7, 8, 9]
      ||
      |+- 6 : [1] -> [1]
      ||
      |+- 7 : [7, 8, 9] -> [7, 8, 9]
    • Danke ramii,
      nach noch ein bisschen Tüftelei sieht das ganze auch für kompliziertere Bäume ganz gut aus ;)


      €: gerade gesehen, dass da noch ein Strich zu viel über der 9 ist. Argh
      "I'd only suggest that you try to understand other people. Try to learn empathy"
    • Benutzer online 1

      1 Besucher