# Category-Programm



## ghazal_setare (20. Sep 2012)

Hallo
ich habe eine Frage zu diese Aufgabe
kann jemand mir sagen,ob die richtig ist?


```
package de.uniwue.jpp.accountbook.model;
import de.uniwue.jpp.accountbook.model.Category;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;
import java.util.Random;

public class Category {
	
	UUID uuid;
	String name;
	String description;
  Category parent;
    
    
   public Category(String uuid, String name, String description, Category parent){
		String id = uuid;
		this.name=name;
		this.description=description;
		this.parent=parent;
	}
	public Category(String name, String description, Category parent){
	
		this.name=name;
		this.description=description;
		this.parent=parent;
	}
	public String getName(){
		return name;
		
	}
	public void addCategory(Category category)
	{
		
	this.parent=category;
	}

	public Set<Category> getCategories(){
		return null;
	
	}
	public String getDescription(){
		return description;
		
	}
	public Category getParent(){
		return parent;
		
	}
	public UUID getUuid(){
		return uuid;
	}
	
	
	
		@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Category other = (Category) obj;
		if (uuid == null) {
			if (other.uuid != null)
				return false;
		} else if (!uuid.equals(other.uuid))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Category [uuid=" + uuid + ", name=" + name + "]";
	}
}
```


----------



## jgh (20. Sep 2012)

nein, oder woher sollen wir das wissen, ob oder ob nicht...welche Aufgabe und was hat das mit SimpleDateFormat zu tun???


----------



## Tomate_Salat (20. Sep 2012)

1. 
	

	
	
		
		

		
			



Java™ Quelltext ist bitte in *


		Java:In die Zwischenablage kopieren


[/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.*


----------



## ghazal_setare (20. Sep 2012)

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:

|--Lebensmittel
   \-- Getränke
   \-- Fleisch
   \-- Gemüse
   \-- Sonstiges

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:

                      -- Lebensmittel
                        \-- Getränke
                        \-- Fleisch
                      -- Versicherungen

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:

                      -- Lebensmittel
                        \-- Getränke
                        \-- Fleisch
                      -- Versicherungen

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.


----------



## Templarthelast (20. Sep 2012)

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.


----------



## SlaterB (20. Sep 2012)

das ist erstaunlich nahe an 
http://www.java-forum.org/java-basics-anfaenger-themen/141530-hilfe-beim-sdf-datum-ausgabe.html
(von dort hierher abgetrennt)

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?


----------



## TryToHelp (20. Sep 2012)

*Was ist den dein Problem?*

Deine Klasse sieht doch so aus als habe sie fast alles, bis auf das Set der Unterkategorie


```
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.


```
public void addCategory(Category category){
    categories.add(category);
    }
```


----------



## TryToHelp (20. Sep 2012)

Edit: Ähm keine garantie ob der Code stimmt, arbeite so sellten mit Sets


----------



## TryToHelp (20. Sep 2012)

TryToHelp hat gesagt.:


> *Was ist den dein Problem?*
> 
> Deine Klasse sieht doch so aus als habe sie fast alles, bis auf das Set der Unterkategorie
> 
> ...



Bzw, wenn man die Aufgabe richtig ließt, soll er dabei noch checken ob es die unterkategorie schon gibt, und diese als paraent hinzufügen.


```
public void addCategory(Category category){
    if (!categories.contains(category){
       categories.add(category);
       category.setParent(this);
    }
}
```


----------



## Firephoenix (20. Sep 2012)

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


```
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)


```
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



```
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


```
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.
> ...



*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.




*Klasse AccountBook*
-Verwaltet Kategorien, Konten, Einträge
-Bei Kategorien wird zwischen Ausgaben und Einnahmen unterschieden
-Erlaubt (gefilterten) Zugriff auf Kategorien und Einträgen


```
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.

[/EDIT]

Gruß


----------



## TryToHelp (20. Sep 2012)

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 ;-)



Firephoenix hat gesagt.:


> ... 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!
> ...


Das hatte ich bei meinem ersten Post schon angesprochen


----------



## Tomate_Salat (20. Sep 2012)

@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]


----------



## Firephoenix (20. Sep 2012)

@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ß


----------



## marekOmama (20. Sep 2012)

Spätestens am 17.9 sollte sich dieses Problem doch erledigt haben oder gab es noch eine zusätzliche Gnadenfrist?


----------



## Firephoenix (20. Sep 2012)

[OT]





marekOmama hat gesagt.:


> Spätestens am 17.9 sollte sich dieses Problem doch erledigt haben oder gab es noch eine zusätzliche Gnadenfrist?



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]


----------



## Templarthelast (20. Sep 2012)

[OT]Es ist auch interessant, dass es so viele neue Benutzer gibt, die sich intensiv mit dieser Aufgabe beschäftigen...[/OT]


----------



## TryToHelp (20. Sep 2012)

marekOmama hat gesagt.:


> Spätestens am 17.9 sollte sich dieses Problem doch erledigt haben oder gab es noch eine zusätzliche Gnadenfrist?



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.



Templarthelast hat gesagt.:


> [OT]Es ist auch interessant, dass es so viele neue Benutzer gibt, die sich intensiv mit dieser Aufgabe beschäftigen...[/OT]



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


----------



## marekOmama (20. Sep 2012)

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.

Möchte jetzt nicht unbedingt verlinken.

Da gibt es dann auch einen Zeitrahmen zu sehen.

Sieht aber nicht sehr motivierend aus.


----------



## Templarthelast (20. Sep 2012)

Das ist natürlich gut kombiniert und anscheinend ist da echt jemand spät drann...


----------



## TryToHelp (20. Sep 2012)

Templarthelast hat gesagt.:


> Das ist natürlich gut kombiniert und anscheinend ist da echt jemand spät drann...



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 ;-)


```
//Und der Preis für die Hilfe steigt
while (waiting){
   price++
}
```


----------



## Firephoenix (20. Sep 2012)

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ß


----------



## ghazal_setare (20. Sep 2012)

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.


----------



## ghazal_setare (20. Sep 2012)

TryToHelp hat gesagt.:


> 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 ;-)
> 
> 
> ```
> ...



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?


----------



## Tomate_Salat (20. Sep 2012)

ghazal_setare hat gesagt.:


> 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]
	
	
	
	





```
System.out.println("Hallo Welt");
```
[/noparse]. Daraus wird dann:

```
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.

In dem Zusammenhang könntest du dir auch mal das hier durchlesen: http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Wenn du diese einfachen Punkte beachtest, helfen wir dir hier auch gerne weiter ;-)


----------



## ghazal_setare (20. Sep 2012)

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?


```
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;
	}
}
```



```
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.


----------



## marekOmama (20. Sep 2012)

Du mußt noch angeben, daß du das Interface implementierst.


```
public class InCategoryFilter implements Filter {...}
```

Für den InMonthFilter gilt das selbe.

Und die applyMethode kannst du am besten so ändern.


```
@Override
public boolean apply(Entry entry) {
  return entry.getCategory().equals(categories);
}
```

Zahlen, Booleans usw. kann man mit == vergleichen, Objecte und Strings z.B. sollten mit eqauls verglichen werden.


----------



## ghazal_setare (21. Sep 2012)

Danke
weist du wie kann ich auch OrFilter NotFilter AndFilter schreiben?
was bedeutet diese Fehler Meldung?


----------



## TryToHelp (21. Sep 2012)

ghazal_setare hat gesagt.:


> ...
> weist du wie kann ich auch OrFilter NotFilter AndFilter schreiben?
> ...



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


```
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


```
@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


----------



## ghazal_setare (21. Sep 2012)

Danke vielmals
Wie kann ich ihnen eine Private Nachricht schicken?


----------



## SlaterB (21. Sep 2012)

einem anonymen Benutzer gar nicht


----------



## TryToHelp (21. Sep 2012)

SlaterB hat gesagt.:


> einem anonymen Benutzer gar nicht



Wie SlaterB schon gesagt hat, solang ich hier kein Registrierter Benutzer bin garnicht, aber vielleicht ändere ich das ja demnächst mal


----------



## Firephoenix (21. Sep 2012)

[OT]





TryToHelp hat gesagt.:


> Wie SlaterB schon gesagt hat, solang ich hier kein Registrierter Benutzer bin garnicht, aber vielleicht ändere ich das ja demnächst mal



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]


----------



## ghazal_setare (21. Sep 2012)

TryToHelp hat gesagt.:


> 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.
> 
> 
> 
> ...



Kannst du bitte die Aufgabe für mich lösen?es ist total wichtig für mich,ich hab fast gemacht aber noch nicht fertig.ich danke dir.


----------



## TryToHelp (21. Sep 2012)

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.


----------



## Marcinek (21. Sep 2012)

ghazal_setare hat gesagt.:


> Kannst du bitte die Aufgabe für mich lösen?es ist total wichtig für mich,ich hab fast gemacht aber noch nicht fertig.ich danke dir.



Für wieviel €€?


----------



## TryToHelp (25. Sep 2012)

Marcinek hat gesagt.:


> Für wieviel €€?



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 ;-)


----------



## SlaterB (25. Sep 2012)

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..

hier geschlossen, bei Bedarf neues Thema


----------

