Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
[/B]-Tags zu schreiben:[/SIZE] [noparse][code=Java]hier Java Code einfügen
[/noparse] (<-- Ist das echt soooo schwer?! :noe
2. Neuer Benutzer(name) gleiches Problem. Also ich gehe mal von aus, ihr habt den gleichen Prof (oder seid vllt sogar die gleiche Person). Da habt ihr JUnit-tests bekommen. Teste es doch einfach.
ich habe Problem um die Klasse Category zu schreiben
die Aufgabe meine ich:
Die Klasse Account
Ein Account steht für ein beliebiges Konto, z.B. Sparbuch, Girokonto, Bargeldbestand, ... . Um Sie unterscheiden zu können, hat jeder Account einen eindeutigen Namen. Außerdem wird der Eröffnungsstand (opening balance) registriert. Implementieren Sie zuerst die Klasse Account im Paket de.uniwue.jpp.accountbook.model,
Die Klasse besitzt die Felder:
String name
Der eindeutige Name des Account.
float openingBalance
Der Eröffnungsstand des Account.
und folgende Konstruktoren und Methoden:
public Account(String name, float openingbalance)
Erstellt einen neuen Account und setzt seinen Namen und Eröffnungsstand. Validieren Sie die Parameter des Konstruktors. Folgende Fälle sollten zu einer Ausnahme führen:
<name> hat den Wert: null
Es wird eine java.lang.NullPointerException geworfen.
<name> ist der leere String.
Es wird eine de.uniwue.jpp.accountbook.model.EmptyStringException geworfen. Erstellen Sie hierzu die von java.lang.RuntimeException abgeleitete Exception de.uniwue.jpp.accountbook.model.EmptyStringException.
public String getName()
Liefert den Namen des Accounts.
public float getOpeningBalance()
Liefert den Eröffnungsstand des Account.
public boolean equals(Object obj) / public int hashCode()
Überschreiben Sie die Methoden equals/hashCode so, dass zwei Account-Objekte genau dann gleich sind, wenn ihre Namen übereinstimmen. Achten Sie auf die Einhaltung des Vertrags zwischen equals/hashCode
public String toString()
Überschreiben Sie die Methode so, dass ein String der Form
[<name> (<openingbalance>)]
zurückgegeben wird.
Die Klasse Category
Buchungen im Haushaltsbuch sollen Kategorien zugeordnet werden. Mögliche Kategorien sind z.B. Lebensmittel, Miete, Abonnements, ... . Dabei können Kategorien Hierarchien bilden:
Implementieren Sie als nächstes die Klasse de.uniwue.jpp.accountbook.model.Category. Die Klasse besitzt die Eigenschaften:
UUID uuid
Ein Universally Unique Identifier. Benutzen Sie hierzu den Typ java.util.UUID.
name: String
Der Name der Kategorie.
description: String
Eine Beschreibung der Kategorie.
parent: Category
Die Oberkategorie, zu der diese Kategorie gehört.
categories: Set<Category>
Eine Menge von Unterkategorien.
und folgende Konstruktoren und Methoden:
public Category(String uuid, String name, String description, Category parent)
Erstellt ein neues Category Objekt mit den gegebenen Werten und setzt die UUID auf den gegeben Wert. Das Argument parent darf den Wert <null> annehmen.
public Category(String name, String description, Category parent)
Erstellt ein neues Category Objekt mit den gegebenen Werten und setzt eine zufällige UUID. Das Argument parent darf den Wert <null> annehmen.
public String getName()
Liefert den Namen der Kategorie.
public void addCategory(Category category)
Fügt eine neue Unterkategorie hinzu. Ist die Kategorie bereits vorhanden, soll Sie nicht erneut hinzugefügt werden. Achten Sie darauf, die Eigenschaft parent in der Unterkategorie korrekt zu setzen.
public Set<Category> getCategories()
Liefert die Menge von Unterkategorien.
public String getDescription()
Liefert die Beschreibung der Kategorie.
public Category getParent()
Liefert die Oberkategorie dieser Kategorie oder den Wert null, falls die Kategorie zu keiner Oberkategorie gehört.
public UUID getUuid()
Liefert die eindeutige UUID für die Kategorie.
public boolean equals(Object o) / public int hashCode()
Überschreiben Sie equals und hashCode so, dass zwei Category Objekte genau dann gleich sind, wenn ihre uuid's gleich sind. Achten Sie auf die Einhaltung des Vertrags zwischen equals/hashCode
public String toString()
Überschreiben Sie die Methode so, dass ein String der Form
[<name> (<uuid>)]
zurückgegeben wird.
Die Klasse Entry
Die Klasse Entry repräsentiert einen Eintrag in das Haushaltsbuch. Ein Eintrag erfolgt immer in einer bestimmten Kategorie und wird außerdem einem Konto zugeordnet, sodass die Geldein- und abgänge nachvollzogenwerden können.
Implementieren Sie die Klasse de.uniwue.jpp.accountbook.model.Entry. Die Klasse hat mindestens die Felder:
Category category
Die Kategorie, zu der der Eintrag zugeordnet wird.
Account account
Das Konto, dem der Eintrag zugeordnet wird.
String description
Die Beschreibung des Eintrags.
Calendar timestamp
Das Datum, an dem die Position erzeugt wurde.
float value
Der Wert des Eintrages in Euro.
und außerdem mindestens die folgenden Konstruktoren und Methoden:
public Entry(Category category, Account account, Calendar timestamp, String description, float value)
Initialisiert einen Eintrag.
public Calendar getTimestamp()
Liefert das Datum, an dem die Position erzeugt wurde.
public String getDescription()
Liefert die Beschreibung des Eintrags.
public float getValue()
Liefert den Wert des Eintrags.
public Category getCategory()
Liefert die Kategorie, der der Eintrag zugeordnet ist.
public Account getAccount()
Liefert den Account, dem der Eintrag zugeordnet ist.
public boolean equals(Object o) / public int hashCode()
Überschreiben Sie equals und hashCode so, dass zwei Entry Objekte genau dann gleich sind, wenn description, value und timestamp gleich sind. Vergleichen Sie bei timestamp nur die Felder für Jahr, Monat und Tag.Achten Sie auf die Einhaltung des Vertrags zwischen equals/hashCode
public String toString()
Überschreiben Sie die Methode toString() so, dass Sie einen String der Form:
[<TT.MM.YYYY> - <value> - <description>]
zurück gibt. Benutzen Sie zur Formatierung des Datums die Klasse java.text.SimpleDateFormat.
Filter für Einträge
Es existieren bereits Konten, Kategorien und Einträge, die als Modell für unser Haushaltsbuch dienen. Um Auswertungen vornehmen zu können, ist es wichtig, die Menge aller Einträge auf bestimmte Eigenschaften hin zu Filtern. Beispiele dafür sind:
Einname- / Ausgabestatistik für spezielle Zeiträume
Einträge einzelner Kategorien, oder Mengen von Kategorien
Einträge für eine Auswahl von Konten
...
Außerdem kann es noch interessant sein, verschiedene Filter miteinander logisch zu verbinden.
Legen Sie die Schnittstelle (Interface) de.uniwue.jpp.accountbook.filter.Filter mit folgendem Inhalt an:
package de.uniwue.jpp.accountbook.filter;
import de.uniwue.jpp.accountbook.model.Entry;
/**
* An interface for arbitrary filters that can be applied to a collection of Entries.
*/
public interface Filter {
/**
* Applies this filter to an {@link Entry} instance.
*
* @param entry an entry.
* @return true if the filter is successfully applied, false otherwise.
*/
boolean apply(Entry entry);
}
Konkrete Filter
InCategoryFilter
Die Methode Filter.apply(Entry entry) liefert genau dann <true>, wenn der Eintrag einer der im Filter definierten Kategorien angehört. Erstellen Sie die von de.uniwue.jpp.accountbook.filter.Filter abgeleitete Klasse de.uniwue.jpp.accountbook.filter.InCategoryFilter mit folgendem Konstruktor:
public InCategoryFilter(Collection<Category> categories)
Initialisiert den Filter mit einer Liste von Kategorien, die er akzeptiert.
InMonthFilter
Die Methode Filter.apply(Entry entry) liefert genau dann <true>, wenn der Eintrag in dem im Filter angegebenen Monat und Jahr erstellt wurde. Zur Angabe des Monats werden die Konstanten aus java.util.Calendar verwendet. Erstellen Sie die von de.uniwue.jpp.accountbook.filter.Filter abgeleitete Klasse de.uniwue.jpp.accountbook.filter.InMonthFilter mit folgendem Konstruktor:
public InMonthFilter(int month, int year)
Initialisiert den Filter mit einem Monat und Jahr, für die Einträge akzeptiert werden sollen.
Logische Verknüpfungen zwischen Filtern
Filter können miteinander logisch verknüpft werden. Es ist zum Beispiel denkbar, dass man nach dem Monat und der Kategorie filtern möchte. Hierzu sollen für die logischen Verknpüfungen and, or, not Klassen bereitgestellt werden, die Filter miteinander verknüpfen und somit komplexe Filterregeln erlauben. Die folgenden Klassen werden ebenfalls von de.uniwue.jpp.accountbook.filter.Filter abgeleitet und ihre apply-Methode entsprechend der Beschreibung implementiert.
NotFilter
Erstellen Sie die Klasse de.uniwue.jpp.accountbook.filter.NotFilter mit dem Konstruktor:
public NotFilter(Filter filter)
Erzeugt eine Instanz mit dem gegebenen Filter.
Implementieren Sie die apply-Methode so, dass Sie das Ergebnis des im Konstruktor gesetzten Filter negiert.
AndFilter
Erstellen Sie die Klasse de.uniwue.jpp.accountbook.filter.AndFilter mit dem Konstruktor:
public AndFilter(Filter left, Filter right)
Erzeugt eine Instanz mit den gegebenen Filtern.
Implementieren Sie die apply-Methode so, dass Sie genau dann <true> liefert, wenn die Anwendung der beiden gesetzten Filter <true> ergibt. Sonst gibt sie <false> zurück.
OrFilter
Erstellen Sie die Klasse de.uniwue.jpp.accountbook.filter.OrFilter mit dem Konstruktor:
public OrFilter(Filter left, Filter right)
Erzeugt eine Instanz mit den gegebenen Filtern.
Implementieren Sie die apply-Methode so, dass Sie genau dann <false> liefert, wenn die Anwendung der beiden gesetzten Filter <false> ergeben. Sonst gibt sie <true> zurück.
Die Klasse AccountBook
Die Klasse AccountBook verwaltet Kategorien, Konten und Einträge. Bei Kategorien wird noch zwischen Ausgaben (expenses) und Einnahmen (incomes) unterschieden. Außerdem bietet Sie Methoden zum Zugriff und Filtern für Kategorien und Einträge. Dies wird für die spätere Auswertung benötigt.
Implementieren Sie die Klasse de.uniwue.jpp.accountbook.model.AccountBook. Wählen Sie für die Verwaltung der Konten, Einträge und Kategorien eine geeignete Implementierung von java.util.Collection. Die Klasse hat mindestens die Felder:
Collection<Account> accounts
Eine Sammlung von Konten.
Collection<Category> incomes
Eine Sammlung von Kategorien, in denen Einnahmen verbucht werden.
Collection<Category> expenses
Eine Sammlung von Kategorien, in denen Ausgaben verbucht werden.
Collection<Entry> entries
Eine Sammlung von Einträgen.
und außerdem die folgenden Konstruktoren und Methoden:
public AccountBook()
Initialisiert ein leeres Haushaltsbuch.
public Collection<Account> getAccounts()
Liefert eine Sammlung mit allen registrierten Konten. Achten Sie darauf, dass es nicht möglich ist, über die zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
public Collection<Category> getIncomes()
Liefert eine Sammlung mit allen Einnahmekategorien. Achten Sie darauf, dass es nicht möglich ist, über die zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
public Collection<Category> getExpenses()
Liefert eine Sammlung mit allen Ausgabekategorien. Achten Sie darauf, dass es nicht möglich ist, über die zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
public Collection<Entry> getEntries()
Liefert eine Sammlung mit allen Einträgen. Achten Sie darauf, dass es nicht möglich ist, über die zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
public void addAccount(Account account)
Fügt einen neuen Account zur Sammlung hinzu, falls dieser noch nicht existiert.
public void addIncomeCategory(Category category)
Fügt eine neue Einnahmekategorie zur Sammlung hinzu, falls diese noch nicht existiert.
public void addExpenseCategory(Category category)
Fügt eine neue Ausgabekategorie zur Sammlung hinzu, falls diese noch nicht existiert.
public void addEntry(Entry entry)
Fügt einen neuen Eintrag zur Sammlung hinzu, falls dieser noch nicht existiert.
public Collection<Category> findAllExpenseCategories()
Erstellt eine flache Repräsentation der Kategorienhierarchie für Ausgaben. Jede Kategorie taucht genau einmal in der Sammlung auf.
Beispiel:
wird zu:
[Lebensmittel, Getränke, Fleisch, Versicherungen]
public Collection<Category> findAllIncomeCategories()
Erstellt eine flache Repräsentation der Kategorienhierarchie für Einnahmen. Jede Kategorie taucht genau einmal in der Sammlung auf.
Beispiel:
wird zu:
[Lebensmittel, Getränke, Fleisch, Versicherungen]
public Collection<List<Category>> findExpenseCategoryByName(String name)
Findet alle Ausgabenkategorien mit dem angegeben Namen und liefert eine Liste mit Pfaden zu den jeweiligen Kategorien.
Beispiel:
-- Lebensmittel
\-- Getränke
\-- Fleisch
-- Party
\-- Getränke
Der Aufruf mit name = "Getränke" liefert dann
[[Lebensmittel, Getränke], [Party, Getränke]]
public Collection<List<Category>> findIncomeCategoryByName(String name)
Findet alle Einnahmenkategorien mit dem angegeben Namen und liefert eine Liste mit Pfaden zu den jeweiligen Kategorien.
Beispiel:
-- Lebensmittel
\-- Getränke
\-- Fleisch
-- Party
\-- Getränke
Der Aufruf mit name = "Getränke" liefert dann
[[Lebensmittel, Getränke], [Party, Getränke]]
public Account findAccountByName(String name)
Findet ein Konto mit dem angegebenen Namen. Ist kein Konto mit diesem Namen vorhanden, wird eine de.uniwue.jpp.accountbook.model.AccountNotFoundException geworfen.
public Collection<Entry> filterEntries(Filter filter)
Liefert alle Einträge, für die der Filter gültig ist.
Du postest eine 3-4 Seiten langen Aufgabenstellung während du nicht in der Lage bist die Regeln dieses Forums und auch nichts wenn du explizit darauf hingewiesen wurdest, zu befolgen und erwarst eine Lösung? Wie schon erwähnt hast du anscheinend Unittests bekommen, aber anstatt auf diesen Ansatz einzugehen lieber nochmal die Aufgabenstellung, die wohl kaum einer motiviert ist zu lesen, reinstellen.
Was du tunen solltest, wäre mal auf die Vorschläge meiner Vorredner einzugehen, dann die Aufgabenstellung auf den dich Betreffenden Teil herrunterbrechen und dann dein Ergebnis und woran es momentan genau hapert wohlformuliert dazu posten.
da wurden selbst diese kilometerlangen Aufgabentexte auch gepostet,
aber es dürfte aufgefallen sein, dass das dort überhaupt nichts bewirkt hat, kein Mensch liest das,
den bisherigen knappen Sätzen nach ist die deutsche Sprache hier nicht ganz sicher, wie sieht es aus?
falls du jedenfalls liest, verstehts und mitmachst, dann erkenne bitte, dass allein mit Text, mit Fragen irgendwas passiert,
schau dir den Verlauf im anderen Thema an, erst als David1982 dort im Detail erklärt hat was an der Ausgabe zu ändern ist usw. ging es bisschen voran
nur Code und aberwitzig lange Aufgabe, das ist nix, es bleibt allein zu sagen:
wann geht es los, wo bleibt die Frage + Erklärungen?
Deine Klasse sieht doch so aus als habe sie fast alles, bis auf das Set der Unterkategorie
Java:
Set<Category> categories=new HashSet<Category>();
dann hast du mit der der Methode addCategory den parrent gesetzt, was wohl eher mit addParrent oder ähnlichem gemacht werden sollte. dort solltest du wohl eher eine Unterkategorie dem Set hinzufügen.
Java:
public void addCategory(Category category){
categories.add(category);
}
Deine Klasse sieht doch so aus als habe sie fast alles, bis auf das Set der Unterkategorie
Java:
Set<Category> categories=new HashSet<Category>();
dann hast du mit der der Methode addCategory den parrent gesetzt, was wohl eher mit addParrent oder ähnlichem gemacht werden sollte. dort solltest du wohl eher eine Unterkategorie dem Set hinzufügen.
Java:
public void addCategory(Category category){
categories.add(category);
}
Meine Güte ... wie man so einen Wall of Text posten (nein falsch, reinkopieren) kann, ohne selbst mal in der Lage zu sein das Ding so aufzubereiten das andere Menschen sich schnell ein Bild der Aufgabe machen können - Deutsch in der Mittelstufe verpasst?
Hier mal ne "Kurzfassung" (nein es ist nicht kurz - aber wenigstens Lesbar) für Leute die hier weitermachen (wehe einer Postet hier eine komplette Lösung für Lau )
Klasse Account
-Steht für ein beliebiges Konto
-Hat einen eindeutigen Namen
Java:
public class Account{
//Attribute:
String name;//Der eindeutige Name des Account.
float openingBalance;//Der Eröffnungsstand des Account.
//Konstruktoren und Methoden:
/**Erstellt einen neuen Account und setzt seinen Namen und Eröffnungsstand.
*<name> hat den Wert: null
*Es wird eine java.lang.NullPointerException geworfen.
*<name> ist der leere String.
*Es wird eine de.uniwue.jpp.accountbook.model.EmptyStringException geworfen.
*/
public Account(String name, float openingbalance){...}
public String getName(){...}
public float getOpeningBalance(){...}
//zwei Account-Objekte sind genau dann gleich, wenn ihre Namen übereinstimmen. Vertrag zwischen //equals und hashCode beachten
public boolean equals(Object obj){...}
public int hashCode(){...}
/**
*gibt eine Stringrepräsentation der Form
*[<name> (<openingbalance>)]
*zurück
*/
public String toString(){...}
}
Zusätzlich ist folgende Exception zu erstellen:
de.uniwue.jpp.accountbook.model.EmptyStringException. abgeleitet von java.lang.RuntimeException
Klasse Category
-Stellt eine Kategorie für Buchungen im Haushaltsbuch dar
-Kategorien können hierachisch verschachtelt werden (Lebensmittel hat z.B. Getränke und Fleisch als Subkategorien)
Java:
public class Category{
//Attribute
UUID uuid; //Eindeutiger Identifier (java.util.UUID.)
String name; //Kategoriename
String description; //Kategoriebeschreibung
Category parent; //Oberkategorie dieser Kategorie
Set<Category> categories;//Menge von Unterkategorien.
//Konstruktoren und Methoden:
/**
*Erstellt ein neues Category Objekt mit den gegebenen Werten und setzt die UUID auf den gegeben *Wert. Das Argument parent darf den Wert <null> annehmen.
*/
public Category(String uuid, String name, String description, Category parent){...}
/**
*Erstellt ein neues Category Objekt mit den gegebenen Werten und setzt eine zufällige UUID. Das *Argument parent darf den Wert <null> annehmen.
*/
public Category(String name, String description, Category parent){...}
public String getName(){...}
/**
*Fügt eine neue Unterkategorie hinzu. Ist die Kategorie bereits vorhanden, soll Sie nicht erneut *hinzugefügt werden. Setzt diese Kategorie als parent der neuen Unterkategorie
*/
public void addCategory(Category category){...}
/**
*Liefert ein Set das die Unterkategorien enthält
*/
public Set<Category> getCategories(){...}
public String getDescription(){...}
/**
*Liefert die Oberkategorie dieser Kategorie oder den Wert null, falls die Kategorie zu keiner *Oberkategorie gehört.
*/
public Category getParent(){...}
public UUID getUuid(){...}
//zwei Category Objekte sind genau dann gleich sind, wenn ihre uuid's gleich sind.
//Vertrag zwischen equals und hashCode beachten
public boolean equals(Object o) / public int hashCode()
/**
*Liefert einen String der Form [<name> (<uuid>)]
*zurück
*/
public String toString(){...}
}
Die Klasse Entry
-Haushaltsbucheintrag über Transaktionen
Java:
public class Entry{
//Attribute:
Category category;//Die Kategorie, zu der der Eintrag zugeordnet wird.
Account account;//Das Konto, dem der Eintrag zugeordnet wird.
String description;//Die Beschreibung des Eintrags.
Calendar timestamp;//Das Datum, an dem die Position erzeugt wurde.
float value;//Der Wert des Eintrages in Euro.
//Konstruktoren und Methoden:
public Entry(Category category, Account account, Calendar timestamp, String description, float value){...}
public Calendar getTimestamp(){...}
public String getDescription(){...}
public float getValue(){...}
public Category getCategory(){...}
public Account getAccount(){...}
//zwei Entry Objekte sind genau dann gleich sind, wenn description, value und timestamp gleich sind
//Vertrag zwischen equals und hashCode beachten
public boolean equals(Object o){...} / public int hashCode(){...}
/**
*liefert einen String der Form [<TT.MM.YYYY> - <value> - <description>]
*zurück
*/
toString(){...}
}
Zur Formatierung des Datums soll die Klasse java.text.SimpleDateFormat. verwendet werden
Interface Filter
-Filtert Einträge im Haushaltsbuch nach Zeiträumen, Kategoriemengen, Mengen von Konten, ...
-Können kombiniert werden
Java:
package de.uniwue.jpp.accountbook.filter;
import de.uniwue.jpp.accountbook.model.Entry;
/**
* An interface for arbitrary filters that can be applied to a collection of Entries.
*/
public interface Filter {
/**
* Applies this filter to an {@link Entry} instance.
*
* @param entry an entry.
* @return true if the filter is successfully applied, false otherwise.
*/
boolean apply(Entry entry);
}
Konkrete Filter
InCategoryFilter
Die Methode Filter.apply(Entry entry) liefert genau dann <true>, wenn der Eintrag einer der im Filter definierten Kategorien angehört. Erstellen Sie die von de.uniwue.jpp.accountbook.filter.Filter abgeleitete Klasse de.uniwue.jpp.accountbook.filter.InCategoryFilter mit folgendem Konstruktor:
public InCategoryFilter(Collection<Category> categories)
Initialisiert den Filter mit einer Liste von Kategorien, die er akzeptiert.
InMonthFilter
Die Methode Filter.apply(Entry entry) liefert genau dann <true>, wenn der Eintrag in dem im Filter angegebenen Monat und Jahr erstellt wurde. Zur Angabe des Monats werden die Konstanten aus java.util.Calendar verwendet. Erstellen Sie die von de.uniwue.jpp.accountbook.filter.Filter abgeleitete Klasse de.uniwue.jpp.accountbook.filter.InMonthFilter mit folgendem Konstruktor:
public InMonthFilter(int month, int year)
Initialisiert den Filter mit einem Monat und Jahr, für die Einträge akzeptiert werden sollen.
Logische Verknüpfungen zwischen Filtern
Erstellen Sie die Klasse de.uniwue.jpp.accountbook.filter.NotFilter mit dem Konstruktor:
public NotFilter(Filter filter)
Erzeugt eine Instanz mit dem gegebenen Filter.
Implementieren Sie die apply-Methode so, dass Sie das Ergebnis des im Konstruktor gesetzten Filter negiert.
Erstellen Sie die Klasse de.uniwue.jpp.accountbook.filter.AndFilter mit dem Konstruktor:
public AndFilter(Filter left, Filter right)
Erzeugt eine Instanz mit den gegebenen Filtern.
Implementieren Sie die apply-Methode so, dass Sie genau dann <true> liefert, wenn die Anwendung der beiden gesetzten Filter <true> ergibt. Sonst gibt sie <false> zurück.
Erstellen Sie die Klasse de.uniwue.jpp.accountbook.filter.OrFilter mit dem Konstruktor:
public OrFilter(Filter left, Filter right)
Erzeugt eine Instanz mit den gegebenen Filtern.
Implementieren Sie die apply-Methode so, dass Sie genau dann <false> liefert, wenn die Anwendung der beiden gesetzten Filter <false> ergeben. Sonst gibt sie <true> zurück.
Klasse AccountBook
-Verwaltet Kategorien, Konten, Einträge
-Bei Kategorien wird zwischen Ausgaben und Einnahmen unterschieden
-Erlaubt (gefilterten) Zugriff auf Kategorien und Einträgen
Java:
public class AccountBook{
//Attribute:
Collection<Account> accounts;//Konten.
Collection<Category> incomes;//Kategorien, in denen Einnahmen verbucht werden.
Collection<Category> expenses;//Kategorien, in denen Ausgaben verbucht werden.
Collection<Entry> entries;//Einträge.
//Konstruktoren und Methoden:
public AccountBook()
/**
*Liefert eine Sammlung mit allen registrierten Konten. Es ist nicht möglich ist, über die *zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
*/
public Collection<Account> getAccounts()
/**
*Liefert eine Sammlung mit allen Einnahmekategorien. Es ist nicht möglich ist, über die *zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
*/
public Collection<Category> getIncomes()
/**
*Liefert eine Sammlung mit allen Ausgabekategorien. Es ist nicht möglich ist, über die *zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
*/
public Collection<Category> getExpenses()
/**
*Liefert eine Sammlung mit allen Einträgen. Es ist nicht möglich ist, über die
*zurückgegebene Menge den internen Zustand der Klasse AccountBook zu verändern.
*/
public Collection<Entry> getEntries()
/**
*Fügt einen neuen Account zur Sammlung hinzu, falls dieser noch nicht existiert.
*/
public void addAccount(Account account)
/**
*Fügt eine neue Einnahmekategorie zur Sammlung hinzu, falls diese noch nicht existiert.
*/
public void addIncomeCategory(Category category)
/**
*Fügt eine neue Ausgabekategorie zur Sammlung hinzu, falls diese noch nicht existiert.
*/
public void addExpenseCategory(Category category)
/**
*Fügt einen neuen Eintrag zur Sammlung hinzu, falls dieser noch nicht existiert.
*/
public void addEntry(Entry entry)
/**
*Erstellt eine flache Repräsentation der Kategorienhierarchie für Ausgaben. Jede Kategorie taucht *genau einmal in der Sammlung auf.
*Beispiel:
*
*-- Lebensmittel
*\-- Getränke
*\-- Fleisch
*-- Versicherungen
*wird zu:
*[Lebensmittel, Getränke, Fleisch, Versicherungen]
*/
public Collection<Category> findAllExpenseCategories()
/**
*Erstellt eine flache Repräsentation der Kategorienhierarchie für Einnahmen. Jede Kategorie taucht *genau einmal in der Sammlung auf.
*Beispiel:
*
*-- Lebensmittel
*\-- Getränke
*\-- Fleisch
*-- Versicherungen
*
*wird zu:
*[Lebensmittel, Getränke, Fleisch, Versicherungen]
*/
public Collection<Category> findAllIncomeCategories()
/**
*Findet alle Ausgabenkategorien mit dem angegeben Namen und liefert eine Liste mit Pfaden zu den *jeweiligen Kategorien.
*Beispiel:
*
*-- Lebensmittel
*\-- Getränke
*\-- Fleisch
*-- Party
*\-- Getränke
*
*Der Aufruf mit name = "Getränke" liefert dann
*[[Lebensmittel, Getränke], [Party, Getränke]]
*/
public Collection<List<Category>> findExpenseCategoryByName(String name)
/**
*Findet alle Einnahmenkategorien mit dem angegeben Namen und liefert eine Liste mit Pfaden zu den *jeweiligen Kategorien.
*Beispiel:
*
*-- Lebensmittel
*\-- Getränke
*\-- Fleisch
*-- Party
*\-- Getränke
*
*Der Aufruf mit name = "Getränke" liefert dann
*[[Lebensmittel, Getränke], [Party, Getränke]]
*/
public Collection<List<Category>> findIncomeCategoryByName(String name)
/**
*Findet ein Konto mit dem angegebenen Namen. Ist kein Konto mit diesem Namen vorhanden, wird *eine de.uniwue.jpp.accountbook.model.AccountNotFoundException geworfen.
*/
public Account findAccountByName(String name)
/**
*Liefert alle Einträge, für die der Filter gültig ist.
*/
public Collection<Entry> filterEntries(Filter filter)
}
[EDIT]Wo ich das gerade im Startpost sehe:
equals und hashCode der Categorie-Klasse aus dem Startpost sehen gut aus, addCategorie soll das hier machen:
"Fügt eine neue Unterkategorie hinzu. Ist die Kategorie bereits vorhanden, soll Sie nicht erneut hinzugefügt werden. Setzt diese Kategorie als parent der neuen Unterkategorie"
Was du machst ist:
"Setze die neue Kategorie als Parent der aktuellen Kategorie" - das ist falsch!
getCategories liefert immer null und keine Unterkategorien - ebenfalls falsch!
Fehler überarbeiten und dann bitte mal einen eigenen Lösungsansatz einstellen bei dem der Kram den man dir hier bietet auch verwendet wird.
Danke Firephoenix für die Zusammenfassung, da hast du dir ja echt viel Arbeit gemacht für die nicht deinige Arbeit. Jedoch könnte der Themenersteller ja erstmal sagen, was sein Problem ist, dann könnte man ihm auch wirklich helfen ;-)
... addCategorie soll das hier machen:
"Fügt eine neue Unterkategorie hinzu. Ist die Kategorie bereits vorhanden, soll Sie nicht erneut hinzugefügt werden. Setzt diese Kategorie als parent der neuen Unterkategorie"
Was du machst ist:
"Setze die neue Kategorie als Parent der aktuellen Kategorie" - das ist falsch!
...
@Firephoenix: Wieso machst du dir diese Arbeit für jemand, der mindestens 5x den Hinweis mit den Java-Tags vorgesetzt bekommen hat und es immernoch ignoriert? Außerdem hat er einen JUnit-Test von seinem Prof bekommen (wie aus dem anderen Thread hervorgeht) mit dem er seine Klasse testen könnte!
Hier ist anscheinend gar keine Eigeninitiative vorhanden und da vergeht mir und sicher anderen auch, die Lust am helfen.
[EDIT]
So mein letzter Versuch hier noch was zu helfen:
Ich habe den JUnit-Test angesprochen: Hast du das mal gemacht? Wenn nein: Machs! Wenn Ja: was kam raus?
Zusätzlich informationen: wo hast du genau Probleme? Und "Es geht nicht", "Ich kanns nicht",... etc sind keine Problembeschreibungen.
In Zukunft: Code-Ausschnitte BITTE in java-Tags setzen. Da wurde schon mehrfach drauf hingewiesen. Es macht keinen guten Eindruck das zu überlesen. Diese Tags sind nicht nur dafür da, damit es schöner ausschaut, sondern damit man es auch anständig lesen kann.
[/EDIT]
@Tomate_Salat
Hatte mir vorher auch beide Threads durchgelesen und entsprechend wenig Motivation konkret zu helfen, aber ich denke es ist auch mal ganz nett wenn man mit gutem Beispiel vorangeht und das Thema etwas weiterbringt, die 30 Minuten die mich das an Arbeit gekostet hat tun in den Semesterferien nach den Klausuren nicht weh
Es gab in den letzten 2-3 Tagen aber echt einige Threads von der Sparte, wo Leute in das Board kommen, mit einer Umgangsart jenseits von Grenzwertig und die dann noch erwarten, das sie Aufgaben erledigt bekommen (der Thread mit den .csv war mal wieder so ein Paradebeispiel im Hausaufgabenbereich, da hab ich mir das Antworten aus Freundlichkeit aber verkniffen )
Hoffen wir mal das sich der Thread hier besser entwickelt.
Gruß
Da scheint jemand mehr zu wissen als der Rest Erleuchte uns doch mal um was für eine Aufgabe es hier eigentlich geht, es würde mich wirklich mal interessieren in welcher Veranstaltung man das macht und mit welcher Vorbereitungszeit/Vorlesungszeit als Vorlauf (und wie es dazu kommt, das Leute wohl in der Nacht vor Abgabe mit extrem wenig Basiswissen noch an der Aufgabe sitzen ^^)
Gruß
[/OT]
Mhh wenn es heute gestelt wurde kann der 17.9. nicht der Abgabetermin gewesen sein oder bin ich in der Falschen Zeitzone? mein Kalender sagt was von dem 20.9.
Und das Problem wurde noch immer nicht genannt, oder bin ich nur zu doof zu verstehen was überhaupt das Problem ist.
Oder will er nur die Lösung der Aufgabenstellung haben, dann sollte er das sagen und den Preis dafür nennen. Meine Meinung
Man muß halt immer gut informiert sein
Über den Packagenamen kann man doch schon den ein oder anderen Rückschluß auf die uni ziehen.
Dann ist als nächstes noch ein jpp drin.
Das J könnte für Java stehen.
Ein P könnte für Programmieren stehen und
ein weiteres P für Professionel oder Praktisch aber eher doch für Praktikum.
Mhh wenn er aber schon so zu spät ist, sollte er wenigstens mal antworten und sagen was sein Problem ist, da er seit heute vormittag nicht mehr geantwortet hat, scheint es für ihn unwichtig geworden zu sein ;-)
Java:
//Und der Preis für die Hilfe steigt
while (waiting){
price++
}
Besonders wenn man sich seit dem 27.08 eigentlich unter anderem mit Collections hätte beschäftigen sollen und dann keine einfachen Operationen mit Sets anwenden kann, aber die bewertete Aufgabe kann ja wohl bis zum 01.10 abgegeben werden.
Aber wir sind ja schließlich nicht dafür da den Leuten beizubringen wie sie sich im Studium verhalten sollen :bae: Eigeninitiative würde ich trotzdem von jedem verlangen der hier nach Hilfe fragt.
Gruß
Hallo,
ich bin neu hier,erst Heute Morgen hier eine Frage gestellt habe,
ich wisse nicht wie soll ich hier schrieben,welche Ordnung gibt es hier?
ich entschuldige mich wenn ich hier was unordentlich geschrieben habe.
ich denke, dass Ihr euch alle mir mit jemande andere der heute auch die gleiche Frage hatte, verwechselt.
Ich möchte auch sagen ,dass ich nur seit 1 Jahr in Deutschland bin,und so Gut kann ich auch nicht Deutsch schreiben.tut mir leid wenn ich was falsch geschrieben habe.
Mhh wenn er aber schon so zu spät ist, sollte er wenigstens mal antworten und sagen was sein Problem ist, da er seit heute vormittag nicht mehr geantwortet hat, scheint es für ihn unwichtig geworden zu sein ;-)
Java:
//Und der Preis für die Hilfe steigt
while (waiting){
price++
}
Hallo,
Danke dass du geholfen hast.,
die klasse Category habe ich jetzt richtig gemacht.
es ist total wichtig für mich.
kann jemanden hier mir Nachhilfe geben?
Du kannst/darfst hier natürlich gerne weiterhin deine Fragen stellen. Beachte einfach nur ein paar Dinge, damit wir es auch einfacher haben dir zu helfen. In deinem Fall war das:
1. Problembeschreibung: Teile uns mit, was genau nicht geht. Wenn Fehlermeldungen auftauchen, dann poste diese mit. Anhand der Fehlermeldung können wir dir oft genau sagen, wo dein Fehler liegt.
2. Java Quellcode in java-tags schreiben. Also einfach [noparse]
Java:
System.out.println("Hallo Welt");
[/noparse]. Daraus wird dann:
Java:
System.out.println("Hallo Welt");
3. Schreibe möglichst nur die Dinge, die für das Problem wichtig ist. Also im Prinzip: Wie ist der aktuelle Stand, wie soll es eigentlich funktionieren, was funktioniert nicht und i.d.R. wichtige Codeausschnitte.
Danke
1-ich weisse nicht wie soll ich in dieser Aufgabe die Klasse orFilter NotFilter und AndFilter erstellen?
2-ich habe die Klasse nCategoryFilter und InMonthFilter gestellt aber bin ich nicht sische ob die richtig sind?
Java:
public class InCategoryFilter {
Collection<Category> categories;
public InCategoryFilter(Collection<Category> categories) {
this.categories=categories;
}
public boolean apply(Entry entry) {
if (entry.category == categories)
return (true);
else
return false;
}
}
Java:
public class InMonthFilter {
int month;
int year;
public InMonthFilter(int month, int year) {
this.month=month;
this.year=year;
}
public boolean apply(Entry entry) {
if(entry.getTimestamp().get(Calendar.MONTH)==month && entry.getTimestamp().get(Calendar.YEAR)==year)
return (true);
else
return false;
}
}
und kommt diese Fehler
[echo] compiling functional tests...
[javac] Compiling 7 source files to /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/build/classes
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/AccountBookTest.java:388: error: method filterEntries in class AccountBook cannot be applied to given types;
[javac] Collection<Entry> entries = uut.filterEntries(new Filter() {
[javac] ^
[javac] required: InMonthFilter
[javac] found: <anonymous Filter>
[javac] reason: actual argument <anonymous Filter> cannot be converted to InMonthFilter by method invocation conversion
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:59: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] new OrFilter(null, mockTrue);
[javac] ^
[javac] required: no arguments
[javac] found: <null>,Filter
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:64: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] new OrFilter(mockTrue, null);
[javac] ^
[javac] required: no arguments
[javac] found: Filter,<null>
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:69: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] new OrFilter(null, null);
[javac] ^
[javac] required: no arguments
[javac] found: <null>,<null>
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:75: error: constructor NotFilter in class NotFilter cannot be applied to given types;
[javac] NotFilter uut = new NotFilter(mockTrue);
[javac] ^
[javac] required: InCategoryFilter
[javac] found: Filter
[javac] reason: actual argument Filter cannot be converted to InCategoryFilter by method invocation conversion
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:79: error: constructor NotFilter in class NotFilter cannot be applied to given types;
[javac] uut = new NotFilter(mockFalse);
[javac] ^
[javac] required: InCategoryFilter
[javac] found: Filter
[javac] reason: actual argument Filter cannot be converted to InCategoryFilter by method invocation conversion
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:87: error: cannot find symbol
[javac] assertTrue("AndFilter.apply() should return <true> if both left- and right side evaluate to <true>", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type AndFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:90: error: cannot find symbol
[javac] assertFalse("AndFilter.apply() should return <false> if left side is <true> and right side is <false>.", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type AndFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:93: error: cannot find symbol
[javac] assertFalse("AndFilter.apply() should return <false> if left side is <false> and right side is <true>.", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type AndFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:96: error: cannot find symbol
[javac] assertFalse("AndFilter.apply() should return <false> if both left and right side are <false>.", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type AndFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:101: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] OrFilter uut = new OrFilter(mockTrue, mockTrue);
[javac] ^
[javac] required: no arguments
[javac] found: Filter,Filter
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:102: error: cannot find symbol
[javac] assertTrue("OrFilter.apply() should return <true> if both left- and right side evaluate to <true>", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type OrFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:104: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] uut = new OrFilter(mockTrue, mockFalse);
[javac] ^
[javac] required: no arguments
[javac] found: Filter,Filter
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:105: error: cannot find symbol
[javac] assertTrue("OrFilter.apply() should return <true> if left side is <true> and right side is <false>.", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type OrFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:107: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] uut = new OrFilter(mockFalse, mockTrue);
[javac] ^
[javac] required: no arguments
[javac] found: Filter,Filter
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:108: error: cannot find symbol
[javac] assertTrue("OrFilter.apply() should return <true> if left side is <false> and right side is <true>.", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type OrFilter
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:110: error: constructor OrFilter in class OrFilter cannot be applied to given types;
[javac] uut = new OrFilter(mockFalse, mockFalse);
[javac] ^
[javac] required: no arguments
[javac] found: Filter,Filter
[javac] reason: actual and formal argument lists differ in length
[javac] /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/LogicalFiltersTest.java:111: error: cannot find symbol
[javac] assertFalse("OrFilter.apply() should return <false> if both left and right side are <false>.", uut.apply(mockEntry));
[javac] ^
[javac] symbol: method apply(Entry)
[javac] location: variable uut of type OrFilter
[javac] Note: /tmp/reactor-b967ec64-97c4-4911-9c6f-d840a7d573c7/src/tests/required/AccountBookTest.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 18 errors
[javac] Compile failed; see the compiler error output for details.
Diese Filter sollen andere Filter also den InCategoryFilter und den InMonthFilter verwenden.
der not filter soll true liefern wenn der werwendete Filter true liefert und umgekehrt, somit die logischen Operationen auf den Filtern ausführen.
Wie in der Aufgabenstellung steht, musst du diesem Filter der ansonsten genauso wie die Anderen Filter das Interface Implementiert im Construktor einen Filter übergeben
Java:
public NotFilter(Filter filter) {
this.filter=filter;
}
und die Apply Methode muss wieder überschrieben werden und zwar diesen Filter werwenden und das ergebnis negieren, was wie folgt aussehen kann
Java:
@Override
public boolean apply(Entry entry) {
if (filter.apply(entry)){
return false;
}else{
return true;
}
}
Das selbe auch für die Anderen beiden logischen opperatoren
Ja mach das mal dann gehst du nicht mehr in der Menge der Gäste unter, bekommst einen coolen Titel im Board, kannst einen protzigen Avatar einstellen, hochzählen seit wieviel Tagen du hier registriert bist, dich von anderen auf deinem Profil stalken lassen, auf Schnapszahlen in den Beiträgen warten, deine Signatur dazu benutzen um Werbung zu machen, die abgegebenen und erhaltenen Likes äh Danke-Klicks zählen, und du kriegst ne coole grüne Lampe wenn du online bist, nicht zu vergessen die angesprochene PN-Funktion, über einen vollen Briefkasten hat sich doch schon jeder gefreut :applaus:
(Auf alle Fälle hättest du eine feste Verbindung von deinem Account zu deinen guten Beiträgen )
[/OT]
Mhh wenn es heute gestelt wurde kann der 17.9. nicht der Abgabetermin gewesen sein oder bin ich in der Falschen Zeitzone? mein Kalender sagt was von dem 20.9.
Ja das ist schon interessant
Und das Problem wurde noch immer nicht genannt, oder bin ich nur zu doof zu verstehen was überhaupt das Problem ist.
Oder will er nur die Lösung der Aufgabenstellung haben, dann sollte er das sagen und den Preis dafür nennen. Meine Meinung
Da ich das Wochenende Weg bin und nur via Smartphone dieses Wochenende nicht und auch nächste Woche weiß ich nicht wie es bei mir Zeitlich aussieht .
Aber wenn du spezielle Fragen hast kann vielleicht ich oder auf jedenfall welche aus dem Forum dir helfen.
Scheinbar doch nicht sowichtig, weil es sind mittlerweile wieder 4 Tage vergangen und keine Antwort auf die Frage von Marcinek, der dir damit ja wohl die hilfe angeboten hat und den Preis wissen möchte, was eine Interessante Frage ist. Wie ich schon geschrieben habe sieht es bei mir Zeitlich momentan eher schlecht aus, das für dich zu machen. Wenn du noch eine Frage hast, aknn ich dir da aber sicherlich etwas weiterhelfen ;-)
muss dieses Thema immer wieder aufgelebt werden?
schon vorher grenzwertig viel, Nutzgehalt jedes Postings nahe 0, was ist hier mit 35 Postings wirklich rausgekommen?
Frage nach €€ reichlich makaber,
jetzt aber nach 4 Tagen nochmal oben drauf, manche haben wirklich nichts zu tun..