Nabend! Ich sitze gerade an einer Übungsaufgabe, wo man verschiedene Personen in einer Liste speichern und diese dann filtern/sortieren/reduzieren soll. Leider scheint es nicht ganz so zu klappen wie es soll und ich finde meinen Fehler nicht. Wie so oft wird es wohl eine Sache sein, die so klein und unauffällig ist dass ich sie permanent übersehe.
Zu meinem Code: Hier erstmal die Klasse Person, ganz simpel:
Hier dann ein Container, der eigentlich bloß ein paar Beispielpersonen liefert:
Und nun zur UI-Klasse. Die main-Methode sagt ja an sich schon, was sie machen soll.
Wie vielleicht auffällt, habe ich in den Methoden teilweise andere Lösungsansätze ausprobiert, um zu gucken wo mein Fehler liegt. Leider hat keiner der Ansätze das ausgegeben, was ich erwartet habe.
Meine momentane Ausgabe sieht ca. so aus:
Danke im Voraus, liebe Grüße
Zu meinem Code: Hier erstmal die Klasse Person, ganz simpel:
Java:
public class Person
{
private int alter;
private String name;
public Person(String name, int alter)
{
this.alter = alter;
this.name = name;
}
public int getAlter()
{
return alter;
}
public String getName()
{
return name;
}
public void setAlter(int alter)
{
this.alter = alter;
}
public void setName(String name)
{
this.name = name;
}
public String toString()
{
return name + ", " + alter;
}
}
Hier dann ein Container, der eigentlich bloß ein paar Beispielpersonen liefert:
Java:
import java.util.*;
public class PersonContainer
{
private static List<Person> meinePersonen = new ArrayList<>(1);
public static List<Person> getListe()
{
Person p1 = new Person("Weiss",20);
Person p2 = new Person("Meier",40);
Person p3 = new Person("Mueller",55);
Person p4 = new Person("Beyer",37);
Person p5 = new Person("Albrecht",42);
Person p6 = new Person("Hansen",56);
meinePersonen.add(p1);
meinePersonen.add(p2);
meinePersonen.add(p3);
meinePersonen.add(p4);
meinePersonen.add(p5);
meinePersonen.add(p6);
return meinePersonen;
}
}
Und nun zur UI-Klasse. Die main-Methode sagt ja an sich schon, was sie machen soll.
Java:
import java.util.*;
public class MainUI
{
private static List<Person> liste = PersonContainer.getListe();
public static void main(String[] args)
{
//Filtern: Alle Personen ausgeben, deren Name auf "er" endet
for(Person p : filtern1()) System.out.println(p);
System.out.println("");
//Filtern: Alle Personen ausgeben, deren Name mit "M" beginnt
for(Person p : filtern2()) System.out.println(p);
System.out.println("");
//Sortieren: Nach Name aufsteigend
for(Person p : sortieren1()) System.out.println(p);
System.out.println("");
//Sortieren: Nach Alter aufsteigend
for(Person p : sortieren2()) System.out.println(p);
System.out.println("");
//Reduzieren: Älteste Person
System.out.println(reduzieren1());
System.out.println("");
//Reduzieren: Person mit längstem Namen
System.out.println(reduzieren2());
System.out.println("");
}
private static List<Person> filtern1()
{
List<Person> filter1Liste = liste;
for(int i = 0; i< filter1Liste.size(); i++)
{
if((((Character)filter1Liste.get(i).getName().charAt(filter1Liste.get(i).getName().length()-2)).equals("e") != true) || (((Character)filter1Liste.get(i).getName().charAt(filter1Liste.get(i).getName().length()-1)).equals("r") != true))
{
filter1Liste.remove(i);
i = i-1;
}
}
return filter1Liste;
}
private static List<Person> filtern2()
{
List<Person> filter2Liste = liste;
for(Person p : filter2Liste)
{
if(((Character)p.getName().charAt(0)).equals("M") == false) filter2Liste.remove(p);
}
return filter2Liste;
}
private static List<Person> sortieren1()
{
List<Person> sortieren1Liste = liste;
for(Person p : sortieren1Liste)
{
for(Person q : sortieren1Liste)
{
if((p.getName().compareTo(q.getName()) > 0) && (sortieren1Liste.indexOf(p) - sortieren1Liste.indexOf(q) <0))
{
Collections.swap(sortieren1Liste, sortieren1Liste.indexOf(p), sortieren1Liste.indexOf(q));
}
}
}
return sortieren1Liste;
}
private static List<Person> sortieren2()
{
List<Person> sortieren2Liste = liste;
for(Person p : sortieren2Liste)
{
for(Person q : sortieren2Liste)
{
if((p.getAlter() > q.getAlter()) && (sortieren2Liste.indexOf(p) - sortieren2Liste.indexOf(q) <0))
{
Collections.swap(sortieren2Liste, sortieren2Liste.indexOf(p), sortieren2Liste.indexOf(q));
}
}
}
return sortieren2Liste;
}
private static Person reduzieren1()
{
List<Person> reduzieren1Liste = liste;
Person aeltester = new Person("", 0);
for(Person p : reduzieren1Liste)
{
if(p.getAlter() > aeltester.getAlter())
{
aeltester.setAlter(p.getAlter());
aeltester.setName(p.getName());
}
}
return aeltester;
}
private static Person reduzieren2()
{
List<Person> reduzieren2Liste = liste;
Person laengster = new Person("", 0);
for(Person p : reduzieren2Liste)
{
if(p.getName().length() > laengster.getName().length()) laengster = p;
}
return laengster;
}
}
Wie vielleicht auffällt, habe ich in den Methoden teilweise andere Lösungsansätze ausprobiert, um zu gucken wo mein Fehler liegt. Leider hat keiner der Ansätze das ausgegeben, was ich erwartet habe.
Meine momentane Ausgabe sieht ca. so aus:
Java:
(ein paar leere Zeilen)
, 0
, 0
Danke im Voraus, liebe Grüße