Hallo Forum,
als eine Art "Abschlussprüfung" für einen Lehrgang möchte ich eine Testanwendung für die Konsole schreiben. Vorbereitet habe ich eine simple Art Fahrzeugarchivierung geschrieben, in der ich diverse Fahrzeuge speichern und auch wieder ausgeben lassen möchte.
Nun habe folgendes Problem:
ich möchte bei der Ausgabe jedem Element einen Index mitgeben, welcher den aktuellen Platz in der Liste angibt. Dieser kann natürlich je nach Sortierung (nach PS) variieren. Über diesen Index möchte ich später auch die einzelnen Objekte zur Bearbeitung, Löschung, zum Klonen etc. ansprechen können. Dann üder seinen angezeigten Index -1 um den eigentlichen Speicherplatz des Elementes anzusprechen.
Ich schaffe es nur nicht, jedem Objekt seinen Index mitzugeben. Ich hatte es schon versucht, über einen expliziten Konstruktor eine statische Variable mitzugeben, nur kann ich aus der Klasse Car die LinkedList in main nicht ansprechen (!?) und auch mit einer for Schleife in der main Methode werden mir die Gesamte Plätze angezeigt, nicht der jeweilige Index.
Lange Rede gar kein Sinn:
Gewünschte Ausgabe soll wie folgt aussehen:
1 | Marke: Audi | Model: A4 | PS: 180
2 | ...
Mein Code sieht so aus:
[CODE lang="java" title="main Methode"]package com.company;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//Init
Scanner sc = new Scanner(System.in);
LinkedList<Car> carLinkedList = new LinkedList<>();
int chose;
//Start
System.out.println("Fahrzeug Archiv +++TEST+++"); //einmalige Anzeige
System.out.println();
do {
//Nutzerauswahl Funktion
System.out.println("Bitte gebe deine Auswahl ein: ");
System.out.println("1 - Fahrzeugdaten eingeben und speichern");
System.out.println("2 - Fahrzeugdaten kopieren");
System.out.println("3 - Fahrzeugdaten ändern");
System.out.println("4 - Fahrzeugliste ausgeben");
System.out.println("5 - Fahrzeugliste sortieren");
System.out.println("6 - Fahrzeugdaten löschen");
System.out.println("7 - FahrzeugLISTE löschen (UNWIDERRUFLICH!");
System.out.println("8 - Fahrzeugliste importieren");
System.out.println("9 - Fahrzeugliste exportieren");
System.out.println("0 - Fahrzeugarchiv beenden");
chose = sc.nextInt();
System.out.println();
//Ausführen der Nutzerauswahl
switch(chose) {
//Fahrzeugdaten eingeben und speichern
case 1:
//Instanziierung
Car car = new Car();
//Datenübernahme
System.out.println("Bitte gebe die Marke ein: ");
String brand = sc.next();
System.out.println("Bitte gebe das Model ein: ");
String model = sc.next();
System.out.println("Bitte gebe die PS an: ");
int horsePower = sc.nextInt();
//Datenübergabe
car.setBrand(brand);
car.setModel(model);
car.setHorsePower(horsePower);
//Einfügen in die LinkedList
carLinkedList.add(car);
//Return zur Nutzerauswahl
break;
//Fahrzeugdaten kopieren
case 2:
System.out.println("Fahrzeugdaten kopieren wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugdaten ändern
case 3:
System.out.println("Fahrzeugdaten ändern wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugliste ausgeben
case 4:
//Ausgabe mittels foreach Schleife nach Prüfung ob Elemente enthalten sind
if( !carLinkedList.isEmpty() ) {
for(Car carVar : carLinkedList)
System.out.println(carVar);
} else {
//Ausgabe das keine Elemente enthalten sind
System.out.println("Fahrzeugarchiv ist leer!");
}
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugliste Sortieren
case 5:
//sortieren mit überschriebener compareTo Methode (absteigend)
Collections.sort(carLinkedList);
//Ausgabe nach erfolgter Sortierung
System.out.println("Fahrzeugliste wurde sortiert");
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugdaten löschen
case 6:
System.out.println("Fahrzeugdaten löschen wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerauswahl
break;
//FahrzeugLISTE löschen
case 7:
//Rückfrage zur Absicherung
System.out.println("Möchtest du wirklich die GESAMTE Liste unwiderruflich löschen?");
System.out.println("0 - nein");
System.out.println("löschen - ja");
//Nutzerauswahl
String deleteConfirmation = sc.next();
//Ausführen der Nutzerauswahl
switch (deleteConfirmation) {
//Löschen der Liste abbrechen
case "0" -> {
System.out.println("Löschen abgebrochen");
System.out.println();
}
//Löschen der Liste ausführen
case "löschen" -> {
carLinkedList.clear();
System.out.println("Fahrzeugliste wurde erfolgreich gelöscht");
System.out.println();
}
}
//Return zur Nutzerabfrage
break;
//Fahrzeugliste importieren
case 8:
System.out.println("Fahrzeugliste importieren wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerabfrage
break;
//Fahrzeugliste exportieren
case 9:
System.out.println("Fahrzeugliste exportieren wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerabfrage
break;
//Beenden
case 0:
System.out.println("Vielen Dank für die Nutzung. Auf Wiedersehen!");
//Beenden des Programms (letzter Aufruf)
break;
}
} while(chose != 0);
}
}
[/CODE]
[CODE lang="java" title="Klasse Car"]package com.company;
public class Car implements Cloneable, Comparable {
//Attribute
private String brand;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
private String model;
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
private int horsePower;
public int getHorsePower() {
return horsePower;
}
public void setHorsePower(int horsePower) {
this.horsePower = horsePower;
}
public static int index;
//Konstruktor
//...
//System Methoden
@Override
public String toString() {
return index + " | Marke: " + this.getBrand() + " | Model: " + this.getModel() + " | PS: " + this.getHorsePower();
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if( !(obj instanceof Car) )
return false;
Car other = (Car) obj;
if( !(this.getBrand().equals(other.getBrand())) )
return false;
if( !(this.getModel().equals(other.getModel())) )
return false;
if(this.getHorsePower() != other.getHorsePower())
return false;
return true;
}
@Override
public Car clone() {
try {
return (Car) super.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
@Override
public int compareTo(Object o) {
if(o instanceof Car) {
Car other = (Car) o;
if(this.getHorsePower() < other.getHorsePower())
return 1;
if(this.getHorsePower() > other.getHorsePower())
return -1;
return 0;
}return 0;
}
}
[/CODE]
Der Code sieht natürlich noch nicht sauber aus, um die Design Patterns/Optimierung kümmere ich mich später. Möchte es erstmal zum Funktionieren bekommen um mein Wissen zu verfestigen
Vielleicht hat einer von euch einen Tipp für mich?
Vielen Dank schon mal im Vorraus
Hendrik
als eine Art "Abschlussprüfung" für einen Lehrgang möchte ich eine Testanwendung für die Konsole schreiben. Vorbereitet habe ich eine simple Art Fahrzeugarchivierung geschrieben, in der ich diverse Fahrzeuge speichern und auch wieder ausgeben lassen möchte.
Nun habe folgendes Problem:
ich möchte bei der Ausgabe jedem Element einen Index mitgeben, welcher den aktuellen Platz in der Liste angibt. Dieser kann natürlich je nach Sortierung (nach PS) variieren. Über diesen Index möchte ich später auch die einzelnen Objekte zur Bearbeitung, Löschung, zum Klonen etc. ansprechen können. Dann üder seinen angezeigten Index -1 um den eigentlichen Speicherplatz des Elementes anzusprechen.
Ich schaffe es nur nicht, jedem Objekt seinen Index mitzugeben. Ich hatte es schon versucht, über einen expliziten Konstruktor eine statische Variable mitzugeben, nur kann ich aus der Klasse Car die LinkedList in main nicht ansprechen (!?) und auch mit einer for Schleife in der main Methode werden mir die Gesamte Plätze angezeigt, nicht der jeweilige Index.
Lange Rede gar kein Sinn:
Gewünschte Ausgabe soll wie folgt aussehen:
1 | Marke: Audi | Model: A4 | PS: 180
2 | ...
Mein Code sieht so aus:
[CODE lang="java" title="main Methode"]package com.company;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//Init
Scanner sc = new Scanner(System.in);
LinkedList<Car> carLinkedList = new LinkedList<>();
int chose;
//Start
System.out.println("Fahrzeug Archiv +++TEST+++"); //einmalige Anzeige
System.out.println();
do {
//Nutzerauswahl Funktion
System.out.println("Bitte gebe deine Auswahl ein: ");
System.out.println("1 - Fahrzeugdaten eingeben und speichern");
System.out.println("2 - Fahrzeugdaten kopieren");
System.out.println("3 - Fahrzeugdaten ändern");
System.out.println("4 - Fahrzeugliste ausgeben");
System.out.println("5 - Fahrzeugliste sortieren");
System.out.println("6 - Fahrzeugdaten löschen");
System.out.println("7 - FahrzeugLISTE löschen (UNWIDERRUFLICH!");
System.out.println("8 - Fahrzeugliste importieren");
System.out.println("9 - Fahrzeugliste exportieren");
System.out.println("0 - Fahrzeugarchiv beenden");
chose = sc.nextInt();
System.out.println();
//Ausführen der Nutzerauswahl
switch(chose) {
//Fahrzeugdaten eingeben und speichern
case 1:
//Instanziierung
Car car = new Car();
//Datenübernahme
System.out.println("Bitte gebe die Marke ein: ");
String brand = sc.next();
System.out.println("Bitte gebe das Model ein: ");
String model = sc.next();
System.out.println("Bitte gebe die PS an: ");
int horsePower = sc.nextInt();
//Datenübergabe
car.setBrand(brand);
car.setModel(model);
car.setHorsePower(horsePower);
//Einfügen in die LinkedList
carLinkedList.add(car);
//Return zur Nutzerauswahl
break;
//Fahrzeugdaten kopieren
case 2:
System.out.println("Fahrzeugdaten kopieren wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugdaten ändern
case 3:
System.out.println("Fahrzeugdaten ändern wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugliste ausgeben
case 4:
//Ausgabe mittels foreach Schleife nach Prüfung ob Elemente enthalten sind
if( !carLinkedList.isEmpty() ) {
for(Car carVar : carLinkedList)
System.out.println(carVar);
} else {
//Ausgabe das keine Elemente enthalten sind
System.out.println("Fahrzeugarchiv ist leer!");
}
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugliste Sortieren
case 5:
//sortieren mit überschriebener compareTo Methode (absteigend)
Collections.sort(carLinkedList);
//Ausgabe nach erfolgter Sortierung
System.out.println("Fahrzeugliste wurde sortiert");
System.out.println();
//Return zur Nutzerauswahl
break;
//Fahrzeugdaten löschen
case 6:
System.out.println("Fahrzeugdaten löschen wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerauswahl
break;
//FahrzeugLISTE löschen
case 7:
//Rückfrage zur Absicherung
System.out.println("Möchtest du wirklich die GESAMTE Liste unwiderruflich löschen?");
System.out.println("0 - nein");
System.out.println("löschen - ja");
//Nutzerauswahl
String deleteConfirmation = sc.next();
//Ausführen der Nutzerauswahl
switch (deleteConfirmation) {
//Löschen der Liste abbrechen
case "0" -> {
System.out.println("Löschen abgebrochen");
System.out.println();
}
//Löschen der Liste ausführen
case "löschen" -> {
carLinkedList.clear();
System.out.println("Fahrzeugliste wurde erfolgreich gelöscht");
System.out.println();
}
}
//Return zur Nutzerabfrage
break;
//Fahrzeugliste importieren
case 8:
System.out.println("Fahrzeugliste importieren wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerabfrage
break;
//Fahrzeugliste exportieren
case 9:
System.out.println("Fahrzeugliste exportieren wird demnächst hinzugefügt");
System.out.println();
//Return zur Nutzerabfrage
break;
//Beenden
case 0:
System.out.println("Vielen Dank für die Nutzung. Auf Wiedersehen!");
//Beenden des Programms (letzter Aufruf)
break;
}
} while(chose != 0);
}
}
[/CODE]
[CODE lang="java" title="Klasse Car"]package com.company;
public class Car implements Cloneable, Comparable {
//Attribute
private String brand;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
private String model;
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
private int horsePower;
public int getHorsePower() {
return horsePower;
}
public void setHorsePower(int horsePower) {
this.horsePower = horsePower;
}
public static int index;
//Konstruktor
//...
//System Methoden
@Override
public String toString() {
return index + " | Marke: " + this.getBrand() + " | Model: " + this.getModel() + " | PS: " + this.getHorsePower();
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if( !(obj instanceof Car) )
return false;
Car other = (Car) obj;
if( !(this.getBrand().equals(other.getBrand())) )
return false;
if( !(this.getModel().equals(other.getModel())) )
return false;
if(this.getHorsePower() != other.getHorsePower())
return false;
return true;
}
@Override
public Car clone() {
try {
return (Car) super.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
@Override
public int compareTo(Object o) {
if(o instanceof Car) {
Car other = (Car) o;
if(this.getHorsePower() < other.getHorsePower())
return 1;
if(this.getHorsePower() > other.getHorsePower())
return -1;
return 0;
}return 0;
}
}
[/CODE]
Der Code sieht natürlich noch nicht sauber aus, um die Design Patterns/Optimierung kümmere ich mich später. Möchte es erstmal zum Funktionieren bekommen um mein Wissen zu verfestigen
Vielleicht hat einer von euch einen Tipp für mich?
Vielen Dank schon mal im Vorraus
Hendrik