rekursive Methode funktioniert nicht

R

Rob1

Mitglied
Ich habe ein Büchereiprojekt mit den Klassen Book und Category und den Interfaces IBook und ICategory. In Category scheint die rekursive Methode containsBook(IBook book) Probleme zu machen(Die Methode schaut ob ein entsprechendes Buch in der Category oder einer SubCategory enthalten ist.). Was ist bei dieser Methode falsch? Ich habe einen Zähler k, der vielleicht dafür verantwortlich ist, aber es könnte auch ein anderer Denkfehler sein.

Es gibt keine Compilerfehler!
[Java]
import java.util.*;

public class Category implements ICategory {
String name;
ArrayList<ICategory> subCat = new ArrayList<ICategory>();
ArrayList<IBook> subBook = new ArrayList<IBook>();

int k;

public Category(String name) {
this.name = name;

}

@Override
public String getName() {
// TODO Auto-generated method stub
return name;
}

@Override
public void addCategory(ICategory cat) {
// TODO Auto-generated method stub

subCat.add(cat);

}

@Override
public void addBook(IBook book) {
// TODO Auto-generated method stub

subBook.add(book);

}

@Override
public boolean containsBook(IBook book) {
// TODO Auto-generated method stub

int a = this.subBook.indexOf(book);
boolean m = false;

if (a == -1) {
if (k < subCat.size()-1)
m = this.subCat.get(++k).containsBook(book);
System.out.println(book);

}

else {
m = true;
}
return m;
}

}

[/code]
Java:
public class Book implements IBook {
private String author;
private String title;

public Book(String author, String title){
	this.title=title;
	this.author=author;
}
	@Override
	public String getAuthor() {
		// TODO Auto-generated method stub
		return author;
	}

	@Override
	public String getTitle() {
		// TODO Auto-generated method stub
		return title;
	}
	
	public String toString(){
		
		return "The title of this Book is " + this.title +" and the name of the author  is "+this.author;
	}
	
	public boolean equals(Object b){
		if(!((b instanceof Book) && (b!=null))){
			return false;
		}else{
			Book special=(Book) b;
		return this.author.equals(special.author)&&this.title.equals(special.title);
		}
	}

}

Java:
import org.junit.Assert;
import org.junit.Test;

/**
 * Testcase for the books and categories.
 */
public class TestBooks {
	public static void main(String[] args) {
		new TestBooks().testStore();
	}

	@Test
	public void testStore() {
		IBook book1 = (IBook) new Book("Cormen",
				"Algorithmen - Die Einführung");
		IBook book2 = (IBook) new Book("Cormen",
				"Algorithmen - Die Einführung");
		IBook book3 = new Book("Tom Mitchel", "Machine Learning");
		IBook book4 = new Book("J. R. R. Tolkien", "Herr der Ringe");
		IBook book5 = new Book("J. R. R. Tolkien", "Der Hobbit");

		System.out.println(book1);
		System.out.println(book2);
		System.out.println(book3);
		System.out.println(book4);
		System.out.println(book5);
		Assert.assertTrue(book1.equals(book1));
		Assert.assertTrue(book1.equals(book2));
		Assert.assertFalse(book1.equals(book3));
		Assert.assertFalse(book1.equals(null));
		ICategory gedruckteBuecher = new Category("gedruckte Bücher");
		ICategory lehrbuecher = new Category("Lehrbücher");
		ICategory fantasy = new Category("Fantasy");
		ICategory informatik = new Category("Informatik");

		gedruckteBuecher.addCategory(informatik);
		gedruckteBuecher.addCategory(lehrbuecher);
		gedruckteBuecher.addCategory(fantasy);
		lehrbuecher.addCategory(informatik);

		informatik.addBook(book1);
		informatik.addBook(book2);
		informatik.addBook(book3);
		fantasy.addBook(book4);
		fantasy.addBook(book5);

		Assert.assertTrue(informatik.containsBook(book1));
		System.out.println(informatik.containsBook(book1));
		Assert.assertTrue(informatik.containsBook(book2));
		Assert.assertTrue(informatik.containsBook(book3));
		Assert.assertTrue(fantasy.containsBook(book4));
		System.out.println(fantasy.containsBook(book4));

		Assert.assertTrue(fantasy.containsBook(book5));

		Assert.assertTrue(gedruckteBuecher.containsBook(book1));
		Assert.assertTrue(gedruckteBuecher.containsBook(book2));

		System.out.println(gedruckteBuecher.containsBook(book2));
		Assert.assertTrue(gedruckteBuecher.containsBook(book4));
		System.out.println(gedruckteBuecher.containsBook(book4));
		Assert.assertTrue(gedruckteBuecher.containsBook(book5));

		Assert.assertFalse(lehrbuecher.containsBook(book5));
		Assert.assertFalse(lehrbuecher.containsBook(book4));
	}
}

Fehlermeldung:The title of this Book is Algorithmen - Die Einführung and the name of the author is Cormen
The title of this Book is Algorithmen - Die Einführung and the name of the author is Cormen
The title of this Book is Machine Learning and the name of the author is Tom Mitchel
The title of this Book is Herr der Ringe and the name of the author is J. R. R. Tolkien
The title of this Book is Der Hobbit and the name of the author is J. R. R. Tolkien
true
true
The title of this Book is Algorithmen - Die Einführung and the name of the author is Cormen
The title of this Book is Algorithmen - Die Einführung and the name of the author is Cormen
Exception in thread "main" java.lang.AssertionError:
at org.junit.Assert.fail(Assert.java:91)
at org.junit.Assert.assertTrue(Assert.java:43)
at org.junit.Assert.assertTrue(Assert.java:54)
at TestBooks.testStore(TestBooks.java:56)
at TestBooks.main(TestBooks.java:9)
 
Zuletzt bearbeitet:
K

Kevin94

Top Contributor
Um zu schauen, ob in irgendeiner Subkategorie das Buch enthalten ist, musst schon über die Listen iterieren und dazu benötigt man auch eine Schleife, ein if alleine ergibt keine Schleife.
 
S

SlaterB

Gast
eine Rekursion kann theoretisch durchaus gerade die einzige Alternative zur Schleife sein,
das k ist hier auch keine lokale Variable, sondern soll vielleich in verschiedenen Aufrufen verwendet werden,

aber funktioniert hier nicht allzu gut,
man kann durchaus auch in rekursiven Methoden über Unterkategorien iterieren, in der Tat
 
R

Rob1

Mitglied
Wie könnte man die rekursive Methode verändern?Gibt es eine Variante ohne Parameter k?
 
B

bone2

Gast
Was soll das k da überhaupt?

Deie Rekursion ist doch einfach nur
Code:
contains(book)
 if book is in subbook
  return true
 else
  for subcat in subcats
   tempbool = subcat.contains(book)
   if tempbool
    return true
  return false
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Methoden rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
J Rekursive swapArray Methode Java Basics - Anfänger-Themen 69
D Rekursive Methode Java Basics - Anfänger-Themen 8
O Quersumme rekursive Methode Java Basics - Anfänger-Themen 3
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
J rekursive Methode Java Basics - Anfänger-Themen 26
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
S Rekursive Methode Java Basics - Anfänger-Themen 8
O Rekursive Methode Java Basics - Anfänger-Themen 4
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
K Rekursive Methode Java Basics - Anfänger-Themen 1
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
L Rekursive Methode a * b berechnen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
P Methoden Rekursive Methode für Potenzen Java Basics - Anfänger-Themen 2
S Int zu Hexadezimal - Rekursive Methode Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
E Rekursive Methode Java Basics - Anfänger-Themen 3
A Rekursive Methode in Iterative umwandeln Java Basics - Anfänger-Themen 6
C Rekursive Methode - Ziffern in Zahl Java Basics - Anfänger-Themen 33
G Rekursive Methode Java Basics - Anfänger-Themen 3
E Rekursive Methode mit Zufallsarray Java Basics - Anfänger-Themen 6
E Rekursive Methode Java Basics - Anfänger-Themen 18
M Rekursive Methode - wo ist der Fehler? Java Basics - Anfänger-Themen 4
J rekursive methode Java Basics - Anfänger-Themen 6
H ScrollBar inaktiv / Rekursive Methode Java Basics - Anfänger-Themen 4
J Rekursive Methode Java Basics - Anfänger-Themen 11
G Rekursive Methode Java Basics - Anfänger-Themen 5
J Rekursive Methode: Fakultaet berechnen Java Basics - Anfänger-Themen 5
G rekursive Methode Java Basics - Anfänger-Themen 3
G rekursive u iterative Methode Java Basics - Anfänger-Themen 8
G Rekursive Methode Java Basics - Anfänger-Themen 7
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
M Rekursive Prüfung ob ein Array sortiert ist... Java Basics - Anfänger-Themen 4
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
M Rekursive Dateiliste erstellen mit Dateiendung(en) ?? Java Basics - Anfänger-Themen 4
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
B Datentypen Suchbaum - Rekursive Ausgabe Java Basics - Anfänger-Themen 1
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
S Eine rekursive Lösung Java Basics - Anfänger-Themen 4
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
N Rekursive Addition mit Scanner Java Basics - Anfänger-Themen 12
shiroX OOP Rekursive und Iterative Definition Java Basics - Anfänger-Themen 2
B Methoden Rekursive Methoden Java Basics - Anfänger-Themen 2
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
S rekursive folge verbessern Java Basics - Anfänger-Themen 2
N Methoden Rekursive Fibonaccizahlen mit Array Java Basics - Anfänger-Themen 2
R Rekursive Ausgabe eines Binärbaums Java Basics - Anfänger-Themen 4
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
S Labyrith Rekursive Wegsuche Java Basics - Anfänger-Themen 4
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
L iterative und rekursive Folge Java Basics - Anfänger-Themen 20
A rekursive Listen in Java? Java Basics - Anfänger-Themen 5
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
K Rekursive Methoden Java Basics - Anfänger-Themen 15
K Rekursive Funktion (Verständnissfrage) Java Basics - Anfänger-Themen 5
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
D rekursive Summenberechnung Java Basics - Anfänger-Themen 8
E Rekursive definierten Folge Java Basics - Anfänger-Themen 10
A HILFE! Rekursive Funktion Java Basics - Anfänger-Themen 20
kulturfenster rekursive Binaere Suche Java Basics - Anfänger-Themen 12
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
B Rekursive & schreiben im ArrayList Java Basics - Anfänger-Themen 2
J Rekursive Fkt. Java Basics - Anfänger-Themen 2
A Rekursive Dateisuche Java Basics - Anfänger-Themen 12
K rekursive Funktion mit mehreren Parametern Java Basics - Anfänger-Themen 5
N rekursive Beispiele Java Basics - Anfänger-Themen 3
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16
D rekursive ausgabe einer zahl Java Basics - Anfänger-Themen 14
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
M Rekursive Binärsuche Java Basics - Anfänger-Themen 6
S rekursive methoden Java Basics - Anfänger-Themen 5
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
T Methode implementieren Java Basics - Anfänger-Themen 21
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige


Oben