Zeilen und Spalten sortieren

leany

Mitglied
Ich komm nicht weiter mit einer Aufgabe zum Thema 'mehrdimensionales Array sortieren':

Ich soll Kundendaten verwalten. Dazu habe ich folgendes Programm geschrieben:

Java:
import inout.Console;
 
    public class Kundenverwaltung 
    {
        public static void main(String[] args) 
        {
            int pos, posMin, spalte, steigung, a=0, b=0;
            String min,merke;
            final String[][] Kundendaten = 
            {{"25", "Notter", "Kurt", "3000 Bern"},
            {"3", "Meyer", "Peter", "3280 Murten"},
            {"58", "Henzig", "Barbara", "3822 Interlaken"},
            {"22", "Vogel", "Tina", "3825 Muerren"}
        };
        final String[][] Ergebnisfeld = new String[4][4];
      System.out.println("Soll aufsteigend oder absteigend sortiert werden? \n(aufsteigend = 0, absteigend = 1)");
      steigung = Console.readInt();
      
        {
            System.out.println("wie soll sortiert werden \n(Kundennummer = 0, Nachname = 1, Vorname = 2, Adresse = 3))");
            spalte = Console.readInt();
            if(steigung == 0 || steigung == 1)
            {
                if (steigung==0)
                {
                    for(int zeile = 0;zeile < Kundendaten.length; zeile++)
                    {
                        posMin = zeile; min = Kundendaten[zeile][spalte];
                        for(pos=zeile+1; pos<Kundendaten.length; pos++)
                        if(Kundendaten[pos][spalte].compareTo(min) < 0)
                        {
                            min= Kundendaten[pos][spalte];
                            posMin = pos;
                        }
                        merke = Kundendaten[zeile][spalte];
                        Kundendaten[zeile][spalte]= Kundendaten[posMin][spalte];
                        Kundendaten[posMin][spalte] = merke;
                        Ergebnisfeld[a][b]= Kundendaten[zeile][spalte];
                        a++;
                        if(zeile == 3)
                        {b++;}
                    }         
                }
                if (steigung==1)
                {
                    for(int zeile = 0; zeile < Kundendaten.length; zeile++)
                    {
                        posMin = zeile; min = Kundendaten[zeile][spalte];
                        for(pos=zeile+1; pos<Kundendaten.length; pos++)
                        if(Kundendaten[pos][spalte].compareTo(min) > 0)
                        {
                            min= Kundendaten[pos][spalte];
                            posMin = pos;
                        }
                        merke = Kundendaten[zeile][spalte];
                        Kundendaten[zeile][spalte]= Kundendaten[posMin][spalte];
                        Kundendaten[posMin][spalte] = merke;  
                        Ergebnisfeld[a][b]= Kundendaten[zeile][spalte];
                        a++;
                        if(zeile == 3)
                        {b++;}
                    } 
                }
            }
            else 
       System.out.println("Ungültige Eingabe ! aufsteigend = 0 oder absteigend = 1 EINGEBEN");
       a=0;
    }
       for(int i=0; i<=3; i++)       
        {
             System.out.println();
            for(int j=0; j<=3; j++)
                {
                    System.out.print(Ergebnisfeld[i][j]+"\t\t");
                }
        
    }
}
   }

Das ganze funktioniert nur eindimensional, aber leider nicht über die ganze 4x4-Matrix. Das heisst, es wird nur sortiert, nach Nummer oder Name oder Vorname oder Adresse. eigentlich bräuchte ich aber Nummer und Name und Vorname und Adresse. Könnt Ihr mir sagen, wie ich alle Spalten ausgeben kann.
A+
Leany
 
Zuletzt bearbeitet:
Vielleicht ist es aber auch alles etwas uebersichtlicher wenn du mit Objecten arbeitest
Es ist moeglich unterschiedliche Comparator zu implementieren.

Vielleicht hilft dir das weiter

Java:
public class Test {
	public static void main(String[] args) {

		ArrayList<Person> list = new ArrayList<Person>();
		list.add(new Person("Chuck", 30));
		list.add(new Person("Bruce", 31));
		list.add(new Person("Jet", 25));
		System.out.println("sort by name");
		Collections.sort(list, new NameComparator());
		printList(list);
		System.out.println("sort by age");
		Collections.sort(list, new AgeComparator());
		printList(list);
	}
	
	static void  printList(ArrayList<Person> list){
		for (Person person : list) {
			System.out.println(person);
		}
	}
}

class NameComparator implements Comparator<Person> {
	@Override
	public int compare(Person o1, Person o2) {
		return o1.name.compareTo(o2.name);
	}
}

class AgeComparator implements Comparator<Person> {
	@Override
	public int compare(Person o1, Person o2) {
		return o1.age.compareTo(o2.age);
	}
}

class Person {
	String name;
	Integer age;

	public Person(String name, Integer age) {
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return name+"\t"+age;
	}
	

}
 

tuttle64

Bekanntes Mitglied
Um absteigend zu sortieren kann man die Methode reverseOrder() der Klasse Collections verwenden, egal ob es sich um ein Array oder eine ArrayList handelt. Ist p ein Array von Personen und es gibt eine Klasse AgeComparator welche aufsteigend nach Alter sortiert, dann kann mit

Arrays.sort(p, Collections.reverseOrder(new AgeComparator()));

absteigend nach Alter sortiert werden. Damit das funktioniert, müssen die Objekte im Array das Interface Comparable implementieren oder man übergibt der Methode reverseOrder einen Comparator.

Im übrigen ist der Grund, weshalb nicht alle Attribute ausgegeben werden, ein Bug im Code.
 
Zuletzt bearbeitet:

leany

Mitglied
Um absteigend zu sortieren kann man die Methode reverseOrder() der Klasse Collections verwenden, egal ob es sich um ein Array oder eine ArrayList handelt. Ist p ein Array von Personen und es gibt eine Klasse AgeComparator welche aufsteigend nach Alter sortiert, dann kann mit

Arrays.sort(p, Collections.reverseOrder(new AgeComparator()));

absteigend nach Alter sortiert werden. Damit das funktioniert, müssen die Objekte im Array das Interface Comparable implementieren oder man übergibt der Methode reverseOrder einen Comparator.

Im übrigen ist der Grund, weshalb nicht alle Attribute ausgegeben werden, ein Bug im Code.

Kannst Du mir sagen, wo der Bug ist. Da es eine Aufgabe ist, sollte ich von diesem Code nicht all zu sehr abweichen.

aufsteigend und absteigend sortieren tut's ja - nur nicht über alle 4 Spalten...

Danke
Leany
 
Zuletzt bearbeitet:

tuttle64

Bekanntes Mitglied
Kannst Du mir sagen, wo der Bug ist. Da es eine Aufgabe ist, sollte ich von diesem Code nicht all zu sehr abweichen.

aufsteigend und absteigend sortieren tut's ja - nur nicht über alle 4 Spalten...

Danke
Leany


Mit der Zuweisung

Ergebnisfeld[a]= Kundendaten[zeile][spalte];

in der for-Schleife wird immer nur die Spalte 0 resp. das ausgewählte Sortierungsattribut zugewiesen und so erhalten die Spalten 1 bis 3 jeweils den Default-Wert null. Die Zeile

System.out.print(Ergebnisfeld[j]+"\t\t");

produziert folgendes:

Tina null null null
Peter null null null
Kurt null null null
Barbara null null null
 
Zuletzt bearbeitet:

leany

Mitglied
Mit der Zuweisung

Ergebnisfeld[a]= Kundendaten[zeile][spalte];

in der for-Schleife wird immer nur die Spalte 0 resp. das ausgewählte Sortierungsattribut zugewiesen und so erhalten die Spalten 1 bis 3 jeweils den Default-Wert null. Die Zeile

System.out.print(Ergebnisfeld[j]+"\t\t");

produziert folgendes:


Soweit bin ich schon gekommen. Stehe aber auf dem Schlauch und komme mit der Lösung nicht weiter. Hab mich nun entschlossen, nochmals ein paar Kapitel weiter vorne anzufangen, vielleicht kapier ich's dann?!?
A+ und danke schon mal
Leany
 

PHens

Mitglied
Guten Abend,

ich stehe nun mit gleicher Aufgabenstellung vor dem Selben Problem.
In das Ergebnisfeld wird nur die ausgewählte Spalte überschrieben, die weiteren Einträge der Zeile jedoch nicht.

Ich finde den Fehler selbst nicht, kann denn mal jemand drüberschauen ? Falls es jemand am Beispiel von leany machen könnte, würde ich es eventuell schon verstehen :rtfm:
 

Tiding

Aktives Mitglied
Aber:

Code:
if(zeile == 3)
                    {b++;}

zeile ist angenommen 3 also wird b eins dazuaddiert, aber:

Code:
for(int zeile = 0;zeile < Kundendaten.length; zeile++)

zeile ist immer noch 3 also springt er aus der Schleife.
Folge:
er geht zwar in die zweite Spalte des neuen Arrays (b++) aber macht damit nix.
 
Zuletzt bearbeitet:

Tiding

Aktives Mitglied
am einfachsten wäre es mit Objekten, aber wenn du den Code nicht derart verändern willst, musst du schauen, wie du in der for-Schleife abhängig von dem Zeilenindex, der dem min zugeordnet ist, dem neuen Array die dazugehörigen verbliebenen Spalten zuweist.
 

PHens

Mitglied
Also sieht das so aus, dass ich dann für das b eine eigene for Schleife bauen sollte ? Die dann innerhalb der Zeile die Spalten durchzählt ?
Weil so wie der Code jetzt ist, also was du schon erklärt hast, schreibt der immer wieder den Inhalt der ersten Spalte in die erste Spalte des Ergebnisfeldes rein, und nachdem der also alle Ergebnisse reingeschrieben hat, (if(zeile == 3) b++) springt der erst in Spalte 2 vom Ergebnisfeld. Und an der Stelle ist aber die Schleife für die Zeilen schob bei 3, also beendet.
Habe ich den Fehler richtig verstanden ? :p

Falls ja, dann hat mir das denke ich schon sehr geholfen. Ich werd nachher mal weiter daran basteln, und komme hoffentlich zu einer lösung. :rtfm::toll:

Mit freundlichem Gruß,
PHens
 

Tiding

Aktives Mitglied
Er beschreibt nur die erste Spalte mit den sortierten Strings.
Die restlichen werden überhaupt garnicht erst beschrieben! Am einfachsten wäre es, jedenfalls anschaulich, während du z.B. (sortieren nach Nachnamen) während du "Henzig" in das neue Array an stelle [0,0] schreibst, auch die restlichen Elemente dieser Zeile (in dem Fall Zeile zwei des alten Arrays) in die Zeile 0 des neuen schreibst, weil man ja hier den Zeilenindex angegeben hat. Ne For-Schleife bietet sich hier aber evtl. nicht gerade an, da es ja nur noch weitere 3 Elemente sind könnte man es so machen wie es schon vorgegeben ist, oder einfach alle Zuordnungen in einer Schleife abhandeln.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
districon 2D Array - Zeilen und Spalten durchsuchen Java Basics - Anfänger-Themen 3
I Datei mit 2 Spalten und millionen Zeilen Java Basics - Anfänger-Themen 19
R Erste Schritte 2D-Array: Zeilen & Spalten ohne schleife übergeben? Java Basics - Anfänger-Themen 3
E Array mit Zahlen von 1-(Zeilen*Spalten) befüllen Java Basics - Anfänger-Themen 8
0 CSV Import - Zeilen, Spalten Java Basics - Anfänger-Themen 15
F Zeilen und Spalten in JTable Selektieren Java Basics - Anfänger-Themen 2
R Hinzufügen von Spalten/Zeilen Java Basics - Anfänger-Themen 3
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
W Anzahl der Zeilen ausgeben lassen Java Basics - Anfänger-Themen 20
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Jede x-te Zeile, lösche 10 Zeilen Java Basics - Anfänger-Themen 9
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
C Zeilen aus einer Datei in Array speichern Java Basics - Anfänger-Themen 4
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
S Java Text splitten mit Tabs, Zeilen, Zeichen und Klammern. Java Basics - Anfänger-Themen 6
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
V Ergebnisse in 2 Zeilen Java Basics - Anfänger-Themen 4
R Eine Datei mit mehreren Zeilen beschreiben Java Basics - Anfänger-Themen 5
C Zeilen in Array einlesen und splitten? Java Basics - Anfänger-Themen 17
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
M Input/Output Alle Zeilen auslesen und in Variable speichern Java Basics - Anfänger-Themen 5
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
J Zeilen aus einer .txt-Datei auslesen und Variablen zuweisen Java Basics - Anfänger-Themen 11
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
M Array: Zeilen vergleichen Java Basics - Anfänger-Themen 4
J Klassen Hilfe bei unbekannten Zeilen bzgl. Klassen / Komponenten Java Basics - Anfänger-Themen 12
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
K Input/Output 6000 Zeilen einlesen und String-Array vergleichen? Java Basics - Anfänger-Themen 1
L String extrahieren mit Regular Expression über mehrere Zeilen hinweg Java Basics - Anfänger-Themen 1
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Einlesen von mehreren Zeilen Java Basics - Anfänger-Themen 4
J Zeilen unsichtbar Java Basics - Anfänger-Themen 11
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
V Methoden Zeilen nach bestimmtem Attribut sortieren Java Basics - Anfänger-Themen 4
M Einzelne Zeilen nach Zeichen auslesen Java Basics - Anfänger-Themen 4
T Methoden HILFE! readLine() liest nur ungerade Zeilen?? Java Basics - Anfänger-Themen 2
G JTextArea: nur bestimmte Zeilen anders formatieren Java Basics - Anfänger-Themen 7
B Input/Output bestimmte Zeilen in .txt Dateinen überschreiben Java Basics - Anfänger-Themen 20
G 3422 Zeilen in Eclipse Console Java Basics - Anfänger-Themen 5
K Erste Schritte Eingabetext besteht aus mehreren Zeilen? Java Basics - Anfänger-Themen 3
T BufferedReader mehrere Zeilen einlesen Java Basics - Anfänger-Themen 4
B Zählen bestimmter Zeilen einer .txt Java Basics - Anfänger-Themen 7
N Zeilen vergleichen Java Basics - Anfänger-Themen 7
N Datei mit max 2000 Zeilen schreiben Java Basics - Anfänger-Themen 9
D Input/Output Zeilen aus txt-datei in Java-Liste einfügen Java Basics - Anfänger-Themen 9
K BufferedWriter schreibt die letzten paar Zeilen nicht Java Basics - Anfänger-Themen 5
C Mehrere Zeilen unter ~.showMessageDialog Java Basics - Anfänger-Themen 12
K Java Split mehrere Zeilen Java Basics - Anfänger-Themen 4
H 200000 Zeilen aus Datei einlesen Java Basics - Anfänger-Themen 13
Q LogFile.log einlesen und Werte zwischen 5 zeilen vergleichen Java Basics - Anfänger-Themen 5
P Bestimmte Zeilen einer Datei ermitteln ? Java Basics - Anfänger-Themen 30
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
M Zeilen aus String exportieren Java Basics - Anfänger-Themen 5
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
A Anzahl Zeilen eines Arrays bestimmen Java Basics - Anfänger-Themen 10
J Zeilen eines Arrays vergleichen Java Basics - Anfänger-Themen 2
S .txt einlesen->Zeilen ersetzen->neu.txt speichern Java Basics - Anfänger-Themen 13
R String über mehrere Zeilen Java Basics - Anfänger-Themen 15
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
S Zeilen zählen Java Basics - Anfänger-Themen 7
Ollek Bestimmte Zeilen aus einer HTML Datei lesen Java Basics - Anfänger-Themen 8
C Zeilen aus einer Datei auslesen Java Basics - Anfänger-Themen 4
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
K Wie kann ich alle Zeilen in eineR Datenbank zählen? Java Basics - Anfänger-Themen 13
JFeel-x Zeilen eines JEditorPanes Java Basics - Anfänger-Themen 2
O 2D Array - Zeilen-/Spaltenlänge ermitteln Java Basics - Anfänger-Themen 4
P String über mehrere Zeilen definieren Java Basics - Anfänger-Themen 3
G Datei zeilen anhängen Java Basics - Anfänger-Themen 3
A Scanner liest nur 999 Zeilen ein Java Basics - Anfänger-Themen 5
B Zeilen in Textdatei löschen Java Basics - Anfänger-Themen 2
D Datei einlesen, zeilen ignorieren, probleeem Java Basics - Anfänger-Themen 7
A Anzahl der Zeilen in Textdatei Java Basics - Anfänger-Themen 7
G Zeilen in Eclipse einblenden Java Basics - Anfänger-Themen 2
M Zeilen aus Textdatei in Array schreiben Java Basics - Anfänger-Themen 2
M Zeilen auslesen Java Basics - Anfänger-Themen 12
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
L In einer Tabelle Zeilen loeschen Java Basics - Anfänger-Themen 4
D Auf Zeilen eines zweidimensionalen Arrays zugreifen Java Basics - Anfänger-Themen 3
D txt nach Zeilen splitten. Java Basics - Anfänger-Themen 9
G Anzahl der Zeilen in einer Datei Java Basics - Anfänger-Themen 7
T die letzten X zeilen einer datei entfernen Java Basics - Anfänger-Themen 19
E was bedeuten @Zeilen Java Basics - Anfänger-Themen 4
T Einlesen von einzelnen Zeilen Java Basics - Anfänger-Themen 2
T null-Zeilen aus einem Array entfernen Java Basics - Anfänger-Themen 4
E Automatischer Zeilen-Umbruch bei JTextArea Java Basics - Anfänger-Themen 4
G zeilen aus text datei löschen Java Basics - Anfänger-Themen 6
G CSV auslesen und Zeilen in Array speichern Java Basics - Anfänger-Themen 13
ARadauer zeilen einer text datei ermitteln Java Basics - Anfänger-Themen 6
S Anzahl von zeilen einer Datei bestimmen. Java Basics - Anfänger-Themen 4
J Tabelle mit mehreren Zeilen dynamisch aufbauen Java Basics - Anfänger-Themen 2
S In einer CSV Datei leere Zeilen ignorieren Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben