Hallo, ich habe folgendes Problem. Ich habe eine vorgegebene Klasse namens "Person", die Personen anhand zweier Kritierien definiert: dem Vornamen und dem Geschlecht.
Ich möchte mich jetzt schon einmal dafür entschuldigen, dass die Quelltexte unendlich lang werden.
Nun habe ich außerdem diese Klasse Kriterien, die den Personen Namen und Geschlecht zuordnet:
Dann existiert ein Interface
So, nun kommt die erste eigene Klasse, die ich geschrieben habe, nämlich
Dieser sortiert die Personen alphabetisch nach ihren Vornamen.
Und meine Aufgabe ist es nun noch eine weitere Methode zu entwerfen, die ebenfalls das interface Vergleicher implementiert und dieses Mal die Geschlechter vergleicht und die Männer zuerst angibt. Nun streikt aber der Compiler jedes Mal, wenn ich versuche booleans zu vergleichen (was logisch ist). Außerdem kann ich unmöglich booleans an eine int-Methode returnen (ebenfalls logisch). Nun suche ich schon seit zwei Stunden nach einem Weg diese Aufgabe zu lösen. Mir ist schon in den Kopf gekommen, die Wahrheitszustände in integer (also 0 und 1) umzuwandeln, aber auch das will nicht glücken. Kann mir vielleicht irgendjemand hierbei unter die Arme greifen?
Ich möchte mich jetzt schon einmal dafür entschuldigen, dass die Quelltexte unendlich lang werden.
Java:
import static java.util.Objects.requireNonNull;
/**
* Eine Person hat einen Vornamen und ein Geschlecht.
*/
public class Person
{
private final String _vorname;
private final boolean _weiblich;
}
/**
* Initialisiert ein Person-Objekt mit den angegeben Daten.
*/
public Person(String vorname, boolean weiblich)
{
_vorname = requireNonNull(vorname);
_weiblich = weiblich;
}
/**
* Liefert den Vornamen.
*/
public String gibVorname()
{
return _vorname;
}
/**
* Gibt an, ob die Person weiblich ist.
*/
public boolean istWeibich()
{
return _weiblich;
}
/**
* Liefert eine String-Darstellung im Format
* Maxi (weiblich)
*/
public String toString()
{
return String.format("%s, %s (%d, %s)", _vorname, _weiblich ? "weiblich" : "männlich");
}
}
Nun habe ich außerdem diese Klasse Kriterien, die den Personen Namen und Geschlecht zuordnet:
Java:
class Kriterien
{
private final Kriterien[] _urspruenglicheReihenfolge =
{
new Person("Karla", false),
new Person("Tom", true),
new Person("Marie", false),
new Person("Konrad", true),
};
private Person[] _menschen;
/**
* Schreibt die Menschen auf die Konsole, geordnet nach einem Kriterium.
*/
public void schreibeGeordnet(Vergleicher vergleicher)
{
_menschen = _urspruenglicheReihenfolge.clone();
insertionsort(vergleicher);
System.out.println("========== " + vergleicher.getClass().toString().substring(6) + " ==========");
for (Person p : _menschen)
{
System.out.println(p);
}
System.out.println();
}
/**
* Insertionsort
*/
private void insertionsort(Vergleicher vergleicher)
{
for (int i = 1; i < _menschen.length; ++i)
{
// Vorbedingung: Die Liste ist von 0 bis i-1 sortiert
insert(i, vergleicher);
// Nachbedingung: Die Liste ist von 0 bis i sortiert
}
}
private void insert(int j, Vergleicher vergleicher)
{
Person einzufuegen = _menschen[j];
while ((j > 0) && vergleicher.vergleiche(einzufuegen, _menschen[j - 1]) < 0)
{
_menschen[j] = _menschen[j - 1];
--j;
}
_menschen[j] = einzufuegen;
}
}
Dann existiert ein Interface
Java:
interface Vergleicher
{
/**
* Vergleicht zwei Personen miteinander und gibt Auskunft darueber, in welcher Beziehung sie zueinander stehen.
* Wenn die beiden Personen (gemessem am Vergleichskriterium) gleich sind, dann wird 0 geliefert.
* Wenn a in einer geordneten Liste vor b stehen wuerde, dann wird irgendeine negative Zahl geliefert.
* Ansonsten wird irgendeine positive Zahl geliefert.
*/
public int vergleiche(Person a, Person b);
}
So, nun kommt die erste eigene Klasse, die ich geschrieben habe, nämlich
Java:
public class PerVorname implements Vergleicher
{
public int vergleiche(Person a, Person b)
{
return a.gibVorname().compareTo(b.gibVorname());
}
}
Und meine Aufgabe ist es nun noch eine weitere Methode zu entwerfen, die ebenfalls das interface Vergleicher implementiert und dieses Mal die Geschlechter vergleicht und die Männer zuerst angibt. Nun streikt aber der Compiler jedes Mal, wenn ich versuche booleans zu vergleichen (was logisch ist). Außerdem kann ich unmöglich booleans an eine int-Methode returnen (ebenfalls logisch). Nun suche ich schon seit zwei Stunden nach einem Weg diese Aufgabe zu lösen. Mir ist schon in den Kopf gekommen, die Wahrheitszustände in integer (also 0 und 1) umzuwandeln, aber auch das will nicht glücken. Kann mir vielleicht irgendjemand hierbei unter die Arme greifen?
Zuletzt bearbeitet von einem Moderator: