# Anzahl der Einträge aus Dokument lesen



## Frema (8. Mrz 2012)

Hallo, 

Ich mache gerade eine Aufgabe und komme nicht weiter. 
Es geht dabei darum, dass man ein Bibliothekensystem erweitern soll (speichern laden ändern erstellen) 
Jetzt habe ich Store und Load und addEntry und getEntry soweit implementiert, es funktioniert jedoch noch nicht meines wissens muss ich noch getNumberOfEntries implementieren. Dabei muss ich aus einem Dokument die Anzahl der Einträge auslesen, allerdings weiß ich nicht wie das geht... kann mir bitte jemand helfen? 
Das War meine Idee (funktioniert aber nicht)


```
public static boolean getNumberOfRentals(String filename) throws ApplicationException, IOException {
		int eintraege;
			RentalEntryIO.open(filename);
        ArrayList s = RentalEntryIO.ausleihliste; 
		    while((s = RentalEntryIO.get()) != null) { 
		    	s ++;
		    	System.out.println(); 
		    }
		    RentalEntryIO.close();
	}
```


----------



## M_Schaffrath (8. Mrz 2012)

Ich habe das Gefühl, du weißt nicht so wirklich, was du da eigentlich machst, denn der Code kann so an mehreren Stellen vom Prinzip her gar nicht funktionieren.

Warum gibt die Methode einen Wahrheitswert zurück? Was macht die Variable 
	
	
	
	





```
eintraege
```
? Was wird dem Objekt 
	
	
	
	





```
s
```
 da zugewiesen? Und was macht die Klasse RentalEntryIO überhaupt so alles?

Vielleicht solltest du erst einmal Schritt für Schritt durchgehen, was da eigentlich passieren soll. Dann ist es relativ leicht, es in Java umzusetzen.


----------



## Frema (8. Mrz 2012)

ok... das hilft mir nun nicht wirklich weiter... eigentlich hatte ich gedacht, die Variable s könnte für die Strings in der Datei Stehen... und wenn ich dann immer einen dazu zähl, bis das Dokument null ist, dann habe ich am Ende die anzahl der Einträge... ok. boolean war noch aus früheren versuchen, hab ich vergessen raus zu machen habs durch void ersetzt. sorry...


----------



## ARadauer (8. Mrz 2012)

> RentalEntryIpen(filename);
> ArrayList s = RentalEntryIO.ausleihliste


Die frage ist was da genau passiert...

aber ich denke wenn s wirklich eine List ist würde ein return s.size(); reichen...


----------



## Frema (8. Mrz 2012)

Ich habe in einer klasse (RentalEntryIO) die Liste


```
public static ArrayList ausleihliste = new ArrayList();
```
und in der Klasse Application ist das getNumberOfRentalEntries
wäre dann folgendes richtig:


```
public static ArrayList ausleihliste = new ArrayList();
	public static void getNumberOfRentals(String filename) throws ApplicationException, IOException {
	return ausleihliste.size; 
   }
```
geht aber nicht...


----------



## M_Schaffrath (8. Mrz 2012)

```
.size()
```
 ist ein Methodenaufruf und benötigt als solcher zwingend die Klammern dahinter.

Allerdings scheint mir der Code immer noch ein wenig wirr zu sein. Bei der Methode 
	
	
	
	





```
.getNumberOfRentals()
```
 wird weder der String-Parameter verwendet, noch die Exceptions geworfen. Dafür versuchst du, einen integer-Wert zurückzugeben, obwohl das 
	
	
	
	





```
void
```
 vor dem Methodennamen besagt, dass es keinen Rückgabewert gibt.
Nirgendwo in dem Code werden Einträge in die ArrayList gesetzt, selbst wenn das irgendwie laufen sollte, wird 
	
	
	
	





```
ausleihliste.size()
```
 immer 0 zurückgeben.

Ich glaube, du hast weder eine genaue Vorstellung, was du da machen sollst, noch, wie Java als Sprache "funktioniert". Willst du nicht erst einmal in eigenen Worten, ohne Programmcode, sagen, wie du vorgehen willst, bevor du da weiter herumstocherst?


----------



## Frema (8. Mrz 2012)

Jaa das will ich  
Also im Prinzip müsste das Programm die Liste aufmachen reinschauen, wie viele einträge da drin sind und dann so lange eines dazuzählen bis nichts mehr da ist (also bis null )oder denke ich da zu kompliziert?


----------



## M_Schaffrath (8. Mrz 2012)

Die Frage ist ja, wie die Einträge überhaupt vorliegen. Am Anfang hast du von einem "Dokument" geredet, bedeutet das, dass es eine Datei mit Daten gibt, die man einzeln einlesen muss? Oder gibt es ein Formular, in dem alle Daten für ein neues Buch erfasst werden, bevor es abgelegt wird? Oder gibt es irgendwo eine fertige ArrayList mit Büchern, die man verwenden kann?

Was wird da überhaupt gezählt? Die Anzahl der vorhandenen Bücher? Die der verliehenen Bücher?

Erzähl doch vielleicht erst einmal, was gegeben ist, denn zumindest ich habe Schwierigkeiten, die Aufgabenstellung überhaupt zu verstehen.


----------



## Frema (8. Mrz 2012)

Oh... Du hast recht ich bin schon wieder zu schnell... also Aufgabenstellung: 

_
...
_






laden (load) und Speichern(store) und addEntry habe ich nun schon implementiert. Die Dateien stehen nun in einer Textdatei (oder sollen zumindest da reingeschrieben werden) die heißt ausleihtext.txt 

Einen Eintrag habe ich auch schon selbst reingeschrieben (manuell direkt) um zu testen, ob die ausgabe in der Konsole funktioniert. Das tut auch soweit, nur in der Benutzeroberfläche tut sich noch nichts. 
Dazu muss ich denk ich mal die NumerOfRentalEntries implementiern...
ist nun soweit klar was ich meine?


----------



## ARadauer (8. Mrz 2012)

> Dazu muss ich denk ich mal die NumerOfRentalEntries implementiern...


Zeig mir mal deine gesamte load methode...


----------



## Frema (8. Mrz 2012)

[XML]public static void load()throws IOException, ApplicationException{

...

	 return true;
	}[/XML]


----------



## M_Schaffrath (8. Mrz 2012)

Hmm, wann gibt die zweite Methode denn "false" zurück? Und warum haben die beiden Methoden unterschiedliche Rückgabetypen?

Ich habe keine Ahnung, wie diese RentalEntryIO-Klasse funktionieren soll, aber gehen wir einmal davon aus, dass sie ungefähr das tut, was ihre Methoden andeuten...
Dann hast du ja schonmal eine Methode, die die Einträge einzeln aus der Datei ausliest und in die Liste stopft. Dann müsstest du ja im Prinzip nur zählen, wie oft das passiert, dann wüsstest du, wie viele Einträge in der Datei sind.


----------



## Frema (8. Mrz 2012)

und da wären wir wieder bei meiner Frage... wiee geht das?

muss dass dann auch in die Load-funktion mit rein?


----------



## ARadauer (8. Mrz 2012)

zb so...


```
public static int getNumberOfRentals(String filename) throws ApplicationException, IOException {
        
        RentalEntryIO.open(filename);
        int count = 0;
        String s;
        while((s = RentalEntryIO.get()) != null) { 
            count++;
        }
        RentalEntryIO.close();
        
     return count;
    }
```


----------



## Frema (8. Mrz 2012)

Dankee 
Das ist jetzt aber fast das Gleiche wie das das ich oben habe, nur ohne s, oder?
Da kommt eine Fehlermeldung in der Konsole The method getNumberOfRentals(String) in the type Application is not applicable for the arguments ()


----------



## ARadauer (8. Mrz 2012)

tja was wird das wohl heißen? Im Grunde ist es einfach, nimm dir mal 2 Stunden Zeit und les dich in die Grundlagen ein...


----------



## M_Schaffrath (8. Mrz 2012)

Dann musst du dir ansehen, wie du die Methode 
	
	
	
	





```
.get()
```
 aufrufen musst. Entweder im Quelltext, wo sie definiert ist, oder, wenn der nicht zur Verfügung steht, in der Schnittstellenbeschreibung, die es in diesem Fall geben sollte.


----------



## Frema (8. Mrz 2012)

hmmm nagut dann werd ich das wohl machen...danke trotzdem


----------



## Frema (8. Mrz 2012)

@M_Schaffrath Danke für den Tip


----------

