Collections Aktuellen Index generell und nach Sortierung ausgeben

Hendrik-HP

Mitglied
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
 

mihe7

Top Contributor
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.
Du musst unterscheiden, ob Du die Position der Liste ausgeben willst (d. h. ein Fahrzeug wird in unterschiedlich sortierten Listen ggf. an unterschiedlichen Positionen auftauchen) oder für ein Fahrzeug eine feste ID haben möchtest. Letzteres könntest Du z. B. erreichen, in dem Du es als Attribut der Klasse Car mitgibst.
 

Hendrik-HP

Mitglied
Hallo mihe7,

ich hatte geplant die erste Möglichkeit zu nutzen. Also unterschiedliche Positionen je nach Sortierung (kein fester Index pro Element sondern pro Speicherplatz). Hatte schon gedacht mit ner HashMap zu arbeiten aber dann kann Element 1 ja auch an Position 74 sein.

Aus der Sicht eines Nutzers soll angezeigt werden das ein bestimmtes Objekt im Moment an 9ter Stelle steht und über diese 9 möchte ich dann auf das Element zugreifen.

Die Nummerierungin der Liste soll also immer fest sein, die Elemente je nach Sortierung auch unterschiedlich...

Sorry aber ich kann echt schlecht erklären :(
 

Hendrik-HP

Mitglied
Hab ich schon versucht.

Hab ne static variable counter in der Klasse angelegt und im Konstruktor counter++ geschrieben. Nur wurde mir dann immer die gesamten Elemente (bei 3 Elementen wurde mir bei allen eine 2 wegen 0 basiert angezeigt)
 

mihe7

Top Contributor
Nein, nur für die Ausgabe brauchst Du einen Zähler. Und static ist fast immer falsch.


In Car
Java:
    @Override
    public String toString() {
        return "Marke: " + this.getBrand() + " |  Model: " + this.getModel() + " |  PS: " + this.getHorsePower();
    }

Und bei der Ausgabe z. B.:
Java:
    int position = 1;
    for (Car car : cars) {
        System.out.printf("%d | %s\n", position, car.toString());
        position++;
    }
 

Hendrik-HP

Mitglied
super! es klappt. Mein Code sieht jetzt so aus:

[CODE lang="java" title="Ausgabe"]//Fahrzeugliste ausgeben
case 4:
//Ausgabe mittels foreach Schleife nach Prüfung ob Elemente enthalten sind
if( !carLinkedList.isEmpty() ) {
int position = 1;
for(Car carVar: carLinkedList) {
System.out.printf("%d | %s\n", position, carVar);
position++;
}
} else {
//Ausgabe das keine Elemente enthalten sind
System.out.println("Fahrzeugarchiv ist leer!");
}
System.out.println();

//Return zur Nutzerauswahl
break;[/CODE]

jetzt bau ich auch die restlichen Funktionen ein (kopieren, löschen etc...)

Vielen Dank :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Name des aktuellen Programms Allgemeine Java-Themen 7
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
sandaime CMD aufrufen und aktuellen pfad ändern Allgemeine Java-Themen 11
B Aktuellen Sourcecode aus Browser laden Allgemeine Java-Themen 43
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
P Aktuellen HTML Code auslesen (von JS manipuliert) Allgemeine Java-Themen 3
J Klassen Stromverbrauch des Aktuellen Systems Allgemeine Java-Themen 8
J Aktuellen Prozess herausfinden. Allgemeine Java-Themen 3
H Auslesen der aktuellen URL eines geöffneten Browser? Allgemeine Java-Themen 17
Steev Screenshot vom Bereich behind dem aktuellen Fenster machen Allgemeine Java-Themen 24
F Wie erfahre ich dynamisch den namen eines aktuellen Objektes Allgemeine Java-Themen 2
M Aktuellen heap space ermitteln? Allgemeine Java-Themen 2
R Exceptions mit aktuellen Programminformationen ausgeben? Allgemeine Java-Themen 2
S Aktuellen Methodennamen ermitteln (MIT Java 1.3) Allgemeine Java-Themen 2
Thermaler Index 16 out of bounds for length 16 Allgemeine Java-Themen 22
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L Array und Index Allgemeine Java-Themen 26
Y ArrayListe eingegebenen index entfernen Allgemeine Java-Themen 1
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
X Lucene index on disk Allgemeine Java-Themen 2
B Hirsch-Index berechnen Allgemeine Java-Themen 11
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
S Char-index aller Buchstaben..? Allgemeine Java-Themen 3
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
GianaSisters Klassen ArrayList Index Integer int Allgemeine Java-Themen 5
Jats ArrayList-Error Index: 1 Size:1 - Bitte um Hilfe Allgemeine Java-Themen 36
A Index Datei aus HTML-Dateien Allgemeine Java-Themen 7
T Index Fehler Allgemeine Java-Themen 9
N Inverted index / inverted list Allgemeine Java-Themen 2
G Hibernate search (Lucene) - Index wird nicht rechtzeitig erzeugt? Allgemeine Java-Themen 2
Developer_X Array Index Out of Bounds Exception Allgemeine Java-Themen 1
B TreeMap Index !!! Allgemeine Java-Themen 6
J fireIndexedPropertyChange(...) Wie gelangt man an den Index? Allgemeine Java-Themen 2
L kann in einem array der 1. index größer als der 2. sein? Allgemeine Java-Themen 10
M Java applet zusammen mit DHTML z-index Problem Allgemeine Java-Themen 2
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
M Index eines Arrays ermitteln und als Integer ausgeben Allgemeine Java-Themen 7
A Classpath ResourceBundle Problem bzgl. Pfade bzw. Pfade (auch in Eclipse) generell? Allgemeine Java-Themen 7
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben