Nabend Leute,
ich soll für die Uni die folgende Aufgabe lösen:
Hier direkt erstmal mein momentaner Code:
Ich habe also die geforderten Klassen Wunsch und Wunschliste erstellt (nach meinem Glauben ist das auch richtig so) und es soweit hinbekommen, dass die Methode "neuerWunsch" dazu führt, dass das Array nicht komplett gefüllt wird, sondern nach der count Variable jeweils nur der Platz.
Das eigentliche Problem:
Das Sortieren nach der Priorität. Ich habe bereits über Comparable oder Comparator gelesen und das ganze auch probiert. Auch mit dem @Override. Sollte ich das richtige gemacht haben, bekomme ich allerdings trotzdem dann jedes mal eine NullPointerException, wenn ich Arrays.sort(b.wuensche); ausführe.
Meine Vermutung ist, dass ich das Array falsch fülle? Wenn ich das, was ich gelesen habe, richtig verstanden habe, kommt es dann zur NullPointerException, wenn das Array "null" ist.
Vielen lieben Dank schonmal
ich soll für die Uni die folgende Aufgabe lösen:
Wunschliste
Aufgabenstellung
In dieser Aufgabe müssen Sie neben einer Klasse TestWunsch zwei weitere Klassen Wunsch und Wunschliste erstellen. Die Klasse Wunschliste soll hierbei mehrere Wünsche aufsteigend sortiert nach ihrer Priorität mittels eines Feldes vom Typ Wunsch verwalten.
Klasse Wunsch
Die Klasse Wunsch soll genau zwei Attribute (Instanzvariablen) beschreibung (Typ String) und prioritaet (Typ int, je höher der Wert, desto höher ist auch die Priorität) besitzen.
Klasse Wunschliste
Die Klasse Wunschliste besitzt ein Attribut wuensche, welches ein Feld vom Typ Wunsch referenzieren soll. Sie dürfen weitere Instanzvariablen verwenden.
Klasse TestWunsch
Diese Klasse enthält die folgenden drei Methoden:
Hinweise
- erzeugeLeereWunschliste erhält als Parameter die maximale Anzahl an Wünschen und gibt ein Objekt der Klasse Wunschliste zurück, wobei das Feld vom Typ Wunschbereits mit der korrekten Größe initialisiert wurde (aber noch keine Wünsche enthält).
- neuerWunsch erhält als Parameter ein Objekt vom Typ Wunschliste sowie einen String (die Beschreibung des Wunsches) und eine Priorität (beliebige ganze Zahle). Sie erstellt einen neuen Wunsch, wobei bei negativer Priorität nur der Wert 0 im Wunsch abgespeichert wird. Der Wunsch soll nun in die Wunschliste eingefügt werden, falls einer der beiden Fälle zutrifft:
- es gibt noch eine freie Stelle in dem Feld vom Typ Wunsch
- es gibt mindestens einen Wunsch im besagten Feld, der eine geringere Priorität hat (welcher dann auch entfernt wird)
- Es ist bei dem Einfügen zu beachten, dass die Wünsche zu jedem Zeitpunkt bezüglich ihrer Priorität in aufsteigender Reihenfolge gespeichert werden! Insbesondere darf es zwischen den Wünschen keine Lücken geben.
- gibWuenscheAus erhält als Parameter ein Objekt vom Typ Wunschliste und gibt alle Wünsche in aufsteigender Reihenfolge zeilenweise im Folgenden Format aus: Wunschbeschreibung (123) (d.h. es wird die Beschreibung des Wunsches gefolgt von der Priorität in Klammern ausgegeben)
Die schwierigste Methode dürfte die neuerWunsch. Es ist hilfreich zuerst eine mögliche Einfügeposition zu finden und dann strikt die beiden Fälle, dass im Feld noch Platz oder das Feld voll ist zu unterscheiden. Wird ein Wunsch eingefügt, muss darauf geachtet werden, dass alle Wünsche bei Index 0 beginnend aufsteigend sortiert sind und zwischen den Wünschen keine Lücken vorkommen. Falls die Wunschliste nicht voll ist, existieren am Ende des Feldes natürlich keine Wünsche (null).
Beachten Sie bei der Sortierung, dass die Wünsche bezüglich ihrer Priorität (hoher Wert = hohe Priorität) aufsteigend sortiert werden. Die Beschriebung spielt diesbezüglich keine Rolle.
Hier direkt erstmal mein momentaner Code:
Java:
public class Wunsch {
String beschreibung;
int prioritaet;
}
public class Wunschliste {
Wunsch wuensche[];
}
public class TestWunsch {
public static void main(String[] args) {
Wunschliste b = erzeugeLeereWunschliste(4);
Wunsch xy = neuerWunsch(b, "Auto", 2);
// Wunsch xx = neuerWunsch(b, "Hallo", 3);
// Wunsch xxx = neuerWunsch(b, "Dker", 4);
// Wunsch xxa = neuerWunsch(b, "P2", 5);
// Wunsch xax = neuerWunsch(b, "Dhasdf", 1);
}
public static int count = 0;
public static Wunschliste erzeugeLeereWunschliste (int a) {
Wunschliste wishList = new Wunschliste();
wishList.wuensche = new Wunsch[a];
return wishList;
}
public static Wunsch neuerWunsch(Wunschliste b, String describe, int prio) {
Wunsch wish = new Wunsch();
wish.beschreibung = describe;
wish.prioritaet = prio;
if (wish.prioritaet < 0) {
wish.prioritaet = 0;
}
if(count < b.wuensche.length) {
if(b.wuensche[count] != wish) {
b.wuensche[count] = wish;
count++;
}
}
return wish;
}
// public static String gibWuenscheaus(Wunschliste b){
// String x = "";
// for(int i = 0; i < b.wuensche.length -count+1; i++) {
// x += (b.wuensche[i].beschreibung + " " + b.wuensche[i].prioritaet + "\n"); FEHLERHAFT.
//
// }
// return x;
// }
}
Ich habe also die geforderten Klassen Wunsch und Wunschliste erstellt (nach meinem Glauben ist das auch richtig so) und es soweit hinbekommen, dass die Methode "neuerWunsch" dazu führt, dass das Array nicht komplett gefüllt wird, sondern nach der count Variable jeweils nur der Platz.
Das eigentliche Problem:
Das Sortieren nach der Priorität. Ich habe bereits über Comparable oder Comparator gelesen und das ganze auch probiert. Auch mit dem @Override. Sollte ich das richtige gemacht haben, bekomme ich allerdings trotzdem dann jedes mal eine NullPointerException, wenn ich Arrays.sort(b.wuensche); ausführe.
Meine Vermutung ist, dass ich das Array falsch fülle? Wenn ich das, was ich gelesen habe, richtig verstanden habe, kommt es dann zur NullPointerException, wenn das Array "null" ist.
Vielen lieben Dank schonmal