Erste Schritte Protokollauswerter

Status
Nicht offen für weitere Antworten.

Devanther

Top Contributor
OK nächste Aufgabe:
Fügen Sie eine Methode anzahlZugriffe in die Klasse Protokollauswerter ein und
überprüfen Sie, ob sie das richtige Ergebnis liefert.
Hinweis: Sie können die Prüfung vereinfachen, indem Sie den Auswerter eine Datei mit nur wenigen
Zeilen lesen lassen. Auf diese Weise werden Sie leichter feststellen können, ob ihre Methode das
richtige Ergebnis liefert. Die Klasse LogdateiLeser hat einen Konstruktor mit folgendem Kopf, um
aus einer bestimmten Datei lesen zu können.

/**
*Erzeuge einen LogdateiLeser, der Einträge aus einer
*Datei mit dem angegeben Namen liest.
*@param dateiname der Name der Logdatei.
*/
public LogdateiLeser(String dateiname)

Klasse Protokollauswerter:

Code:
/**
* Eine Klasse, die das Protokoll eines Webservers
* in Hinsicht auf Zugriffe pro Stunde auswertet.
*
* @author David J. Barnes und Michael Kölling.
* @version 31.07.2011
*/
public class ProtokollAuswerter
{
    // Hier werden die Zugriffe für die Stunden gehalten
    private int[] zugriffeInStunde;
    // Verwendung eines LogdateiLesers
    private LogdateiLeser leser;
   
    private int stunde;
   
   
    /**
     * Erzeuge ein Exemplar, das die Zugriffe in den
     * Stunden eines Tages zählt.
     */
    public ProtokollAuswerter(String Sebastian)
    {
        // das Array-Objekt erzeugen, das die Zugriffe
        // in den einzelnen Stunden eines Tages zählt.
        zugriffeInStunde = new int[24];
        // Den Leser für die Logdatei erzeugen.
        leser = new LogdateiLeser(Sebastian);
    }
   
    /**
     * Analysiere die in der Logdatei erfassten Zugriffsdaten.
     */
    public void analysiereStundendaten()
    {
        while(leser.hasNext()) {
            Logeintrag eintrag = leser.next();
            int stunde = eintrag.gibStunde();
            zugriffeInStunde[stunde]++;
        }
    }
    public int anzahlZugriffe() {

    int gesamt = 0;
    for (int aktuellerZugriff : zugriffeInStunde){
         gesamt = gesamt + aktuellerZugriff;
    }
    return gesamt;
    }
   
   
    /**
     * Gib die Anzahl der Zugriffe in den Stunden eines
     * Tages nach Stunden sortiert auf der Konsole aus.
     * Diese Werte sollten zuerst mit einem Aufruf von
     * 'analysiereStundendaten' berechnet werden.
     */
    public void stundendatenAusgeben()
    {
        System.out.println("Stunde: Zugriffe");
        for(int stunde = 0; stunde < zugriffeInStunde.length; stunde++) {
            System.out.println(stunde + ": " + zugriffeInStunde[stunde]);
        }
    }
   
    /**
     * Gib die Zeilen der Logdatei auf der Konsole aus.
     */
    public void logdateiAusgeben()
    {
        leser.datenAusgeben();
    }
}

So die Methode anzahlZugriffe haben wir schonmal.
Welche Datei mit nur wenigen Zeilen soll hier gelesen werden?
Die Klasse Protokollauswerter soll lesen.
Verstehe die Aufgabenstellung nicht ganz.
Das was da über die Klasse LogdateiLeser steht bzw. deren Konstruktor muss ich nun
auf die Klasse Protokollauswerter übertragen? Sodass Protokollauswerter die Datei lesen kann?
 

Harry Kane

Top Contributor
So die Methode anzahlZugriffe haben wir schonmal.
Welche Datei mit nur wenigen Zeilen soll hier gelesen werden?
Die Klasse Protokollauswerter soll lesen.
Verstehe die Aufgabenstellung nicht ganz.
Das was da über die Klasse LogdateiLeser steht bzw. deren Konstruktor muss ich nun
auf die Klasse Protokollauswerter übertragen? Sodass Protokollauswerter die Datei lesen kann?
So die Methode anzahlZugriffe haben wir schonmal.
Welche Datei mit nur wenigen Zeilen soll hier gelesen werden?
Die Klasse Protokollauswerter soll lesen.
Verstehe die Aufgabenstellung nicht ganz.
Das was da über die Klasse LogdateiLeser steht bzw. deren Konstruktor muss ich nun
auf die Klasse Protokollauswerter übertragen?
Zweimal die gleiche Frage, praktisch wortgleich gestellt. Fortschritte seit dem letzten Mal: null.
Du verstehst nicht die Aufgabenstellung, und du verstehst auch nicht, wieviel von der Aufgabenstellung schon gelöst wurde. Die ganze Funktionalität gibt es schon. Du musst lediglich prüfen, ob das, was programmiert wurde, zu einem richtigen Ergebnis führt.
Dein Problem ist nicht nur die Programmiersprache, sondern auch das, was vorher kommt, nämlich ein Grundverständnis vom eigentlichen Problem. Ich glaube auch nicht mehr nur, dass du ein Troll bist, sondern halte dich für einen Bot, der das Forum mit leichten Variationen der immer gleichen Textbausteine beglückt.
 

Devanther

Top Contributor
Was fehlt noch, bis die Aufgabe gelöst ist?
Wie überprüfe ich, ob die Methode anzahlZugriffe das richtige Ergebnis liefert?
 

Devanther

Top Contributor
Fügen Sie Protokollauswerter eine Methode aktivsteStunde hinzu, die die Stunde mit den meisten Zugriffen
liefern soll. Sie können dies implementieren, indem Sie das Array zugriffeInStunde nach dem Element mit dem höchsten Wert durchsuchen. Hinweis: Müssen Sie jedes Element überprüfen, um den höchsten Wert zu finden?
Falls ja, dann verwenden Sie eine for-Schleife oder eine for-each-Schleife.
Welche ist besser geeignet für diesen Fall?

Meine Gedanken:
Diesmal soll nicht die Gesamtanzahl aller Zugriffe berechnet werden sondern die Stunde mit den meisten Zugriffen.
Das Array ist wieder das selbe: zugriffeInStunde
Ich würde sagen, dass alle Elemente durchsucht werden müssen und es wird ein Schleifenzähler benötigt.
Es muss also die for-Schleife verwendet werden, da eine for-each-Schleife keinen Schleifenzähler hat.
Es werden alle 24 Stunden durchgegangen und es wird immer der jeweils höchste Wert gemerkt.
Es muss verglichen werden ob der aktuelle Wert der durchlaufen wird, höher ist, als der Wert, der
schon gemerkt wurde.
Jetzt muss das nur noch in Code umgewandelt werden-.-
 

Devanther

Top Contributor
Es werden alle 24 Stunden durchgegangen und es wird immer der jeweils höchste Wert gemerkt.
Es muss verglichen werden ob der aktuelle Wert der durchlaufen wird, höher ist, als der Wert, der
schon gemerkt wurde.

Was ist der erste Schritt? Ein Tipp, wie ich das umsetzen kann?
 

Devanther

Top Contributor
Code:
public int aktivsteStunde(){

    int gesamt = 0;
    {

Dann gäbe es gar keine for Schleife und das kann nicht sein.
Die Sammlung muss durchlaufen werden.
Ich brauche hier eine if Anweisung!
 

mrBrown

Super-Moderator
Mitarbeiter
Code:
public int aktivsteStunde(){

    int gesamt = 0;
    {

Dann gäbe es gar keine for Schleife und das kann nicht sein.
Die Sammlung muss durchlaufen werden.
Ich brauche hier eine if Anweisung!
Richtig - am Ende brauchst du sowohl Schleife als auch if.
Aber um einen leichteren Anfang zu finden, muss man ja nicht immer mit dem anfangen, was man am Ende braucht. Erstmal mit den einfacheren Teilen anzufangen macht das hinzufügen des komplizierteren oftmals leichter.
 

Devanther

Top Contributor
Code:
public int aktivsteStunde() {
    int gesamt = 0;
    for (int aktuellerZugriff : zugriffeInStunde){   
        if(aktuellerZugtriff() > zugriffeInStunde())
        return;   
    }
    }
    return null;
    }

Oder muss ich das mit einem if else Statement schreiben?
Was genau bedeutet null?
 

mrBrown

Super-Moderator
Mitarbeiter

Devanther

Top Contributor
Das Schlüsselwort null hat die Bedeutung kein Objekt.
Null wird in einer Objektvariablen gespeichert, die nicht
auf ein konkretes Objekt verweist.

Verstehe diese Definition nicht ganz.

Code:
public boolean hoeheresGebot(Gebot gebot)
    {
        if(hoechstesGebot == null) {
            // es gibt kein älteres Gebot
            hoechstesGebot = gebot;
            return true;
        }
        else if (gebot.gibHoehe() > hoechstesGebot.gibHoehe()){
            // das Gebot ist besser als das letzte
            hoechstesGebot = gebot;
            return true;
        }
        else {
            // das Gebot ist nicht besser
            return false;
        }
    }

Kann ich diesen Code auf den Code dieser Aufgabe übertragen?
Man müsste halt nur irgendwo die for-Schleife einbauen.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Verstehe diese Definition nicht ganz.
Was verstehst du daran nicht?
Java:
public class Person {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}
....
public static void main(String[] args) {
    Person p1 = new Person(); // die Variable p1 verweist auf ein Objekt
    p1.setName("Sebastian"); // von diesem Objekt können Methoden aufgerufen werden
    p1 = null;
    p1.setName("Jakob"); // es fliegt eine NullPointerException weil p1 nicht mehr auf ein Objekt verweist sondern auf nichts! Und nichts hat keine Methode "setName"
}

Kann ich diesen Code auf den Code dieser Aufgabe übertragen?
Man müsste halt nur irgendwo die for-Schleife einbauen.
Ja die Überprüfung ob etwas größer ist als was anderes kannst du übertragen. Von der Methode "anzahlZugriffe" könnte man die for-Schleife übertragen.
Aber nicht irgendwo ... es sollte schon logisch richtig sein ;) nur bezweifle ich dass du es schaffst ohne Grundlagenwissen, welches dir immer noch zu 99% fehlt!
Du wirst irgendwas zusammenkopieren ohne dir zu überlegen was denn da passiert ...
 

JStein52

Top Contributor
Von der Methode "anzahlZugriffe" könnte man die for-Schleife übertragen.
Aber nicht als for each sondern als "normale" for-Schleife. Es ist nach der aktivsten Stunde gefragt. Und bei einer for each müsste er noch selber einen Zähler mitführen. Plus die variable in der er sich die bisher aktivste Stunde merken muss plus den Wert für diese bisher aktivste Stunde ... das wird ihn überfordern
 

JStein52

Top Contributor
Ich würde sagen, dass alle Elemente durchsucht werden müssen und es wird ein Schleifenzähler benötigt.
Es muss also die for-Schleife verwendet werden, da eine for-each-Schleife keinen Schleifenzähler hat.
Es werden alle 24 Stunden durchgegangen und es wird immer der jeweils höchste Wert gemerkt.
Es muss verglichen werden ob der aktuelle Wert der durchlaufen wird, höher ist, als der Wert, der
schon gemerkt wurde.
Jetzt mach halt genau das was du da geschrieben hast mal !!!
1. Schritt: den leeren Methodenrumpf mit richtigem return-Typ und Methodenparametern (falls notwendig) hinschreiben.
2. Schritt: die Schleife hinschreiben.
3. Schritt: Überlegen was du in jedem Schleifendurchgang miteinander vergleichen musst. Dir dafür passende Variablen anlegen.
4. Schritt: überlegen was deine Methode zurückgeben muss
 

Devanther

Top Contributor
1. kann ich leider nicht.
2.
Code:
for (int aktuellerZugriff : zugriffeInStunde){
3. verglichen werden muss aktuellerZugriff (der Wert der gerade durchlaufen wird) mit gesamt(mit dem Wert der bisher gespeichert ist)
4. weiss ich auch nicht

ich müsste echt total raten
ich bin total verwirrt boolean, null, return true/false etc...!
 

mrBrown

Super-Moderator
Mitarbeiter
1. kann ich leider nicht.
Dann besser zurück zum Anfang des Buches.

2.
Code:
for (int aktuellerZugriff : zugriffeInStunde){
Kann man so machen, ist aber nicht anzuraten.
Besser noch mal zurück zum Anfang des Buches.
3. verglichen werden muss aktuellerZugriff (der Wert der gerade durchlaufen wird) mit gesamt(mit dem Wert der bisher gespeichert ist)
Hm, ne...mit viel wohlwollen kann man da irgendwas reininterpretieren was richtig sein könnte...aber Ne.
Besser noch mal zurück zum Anfang des Buches.
4. weiss ich auch nicht
Dann besser noch mal zurück zum Anfang des Buches.
ich müsste echt total raten
ich bin total verwirrt boolean, null, return true/false etc...!
Dann besser noch mal zurück zum Anfang des Buches.
 

Devanther

Top Contributor
1. Schritt: den leeren Methodenrumpf mit richtigem return-Typ und Methodenparametern (falls notwendig) hinschreiben.

public boolean aktivsteStunde() {
....

denke ich überhaupt in die richtige Richtung?
Methode boolean nehmen?
Dann for-Schleife schreiben und IF Anweisung?
Wenn die höchste Stunde höher ist als die alte..return true; ?

else {
// die Stunde ist nicht höher
return false;
}

aktuellerZugriff und zugriffeInStunde miteinander vergleichen?
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
denke ich überhaupt in die richtige Richtung?
Nein
Methode boolean nehmen?
boolean ist keine Methode, und für den Fall auch kein geeigneter Rückgabewert, denn
Fügen Sie Protokollauswerter eine Methode aktivsteStunde hinzu, die die Stunde mit den meisten Zugriffen liefern soll.
und eine Stunde ist in dem Fall eine Zahl und damit kein boolean.
Dann for-Schleife schreiben und IF Anweisung?
Ja
Wenn die höchste Stunde höher ist als die alte..return true; ?
Nein und nein.
aktuellerZugriff und zugriffeInStunde miteinander vergleichen?
Du kannst einen int nicht mit einem int[] vergleichen.
ich bin total verwirrt boolean, null, return true/false etc
Tja, es ist nunmal verwirrend, wenn man ohne eine Sprache gelernt zu haben, versucht, einen Brief zu schreiben.
 
Zuletzt bearbeitet:

Devanther

Top Contributor
Ok, das bringt mich schon etwas weiter.
Falsche Richtung^^

public int aktivsteStunde() {

return typ also: int

was ist an der bisherigen for-Schleife verkehrt?
Muss das so eine werden?
for(int i = 0; i < Länge des Arrays; i++)
und dann i (den bisherigen Wert) mit dem neuen aus dem Array vergleichen?
Solange bis alle 24 Werte durchgelaufen sind?

edit: ne das kann nicht sein.

Code:
public int anzahlZugriffe() {

    int gesamt = 0;
    for (int aktuellerZugriff : zugriffeInStunde){
         gesamt = gesamt + aktuellerZugriff;
    }
    return gesamt;
    }

In gesamt sind alle Zugriffe drin, gesamt mit ner Schleife durchlaufen lassen
und immer den höchsten Wert merken?
aktuellerZugriff mit gesamt vergleichen?
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Das kann nicht funktionieren, deine Schleife geht ja nur solange gesamt < zugriffeInStunden ist. Dann brauchst du danach nicht abfragen ob gesamt > zugriffeInStunden ist. Das kann es nie werden
 

Devanther

Top Contributor
Dann kann es nur noch gesamt und aktuellerZugriff sein^^ der Vergleich

private int merken;
int gesamt = 0;
for (int aktuellerZugriff : zugriffeInStunde){


If(gesamt > aktuellerZugriff, int gesamt = merken )

}
return merken;
}

else {
return false;
}
}

ohman^^die Klammern
Wenn gesamt > als aktuellerZugriff dann wird der Wert gemerkt, ansonsten bleibt der alte Wert.

Die for-Schleife ist falsch? Habe ein Problem die for-Schleife mit einer if Anweisung zu verbinden.
int gesamt = 0; .... ist wenigstens die erste Zeile richtig?
Brauche ich ein neues Datenfeld in dem der größte Wert gepeichert wird?
 
Zuletzt bearbeitet:

Devanther

Top Contributor
Java:
If(gesamt > aktuellerZugriff){
return gesamt;
}else{
return false;
 
Zuletzt bearbeitet von einem Moderator:

Devanther

Top Contributor
Für mich ist das zumindest etwas Logik!

Java:
 public int aktivsteStunde() {
    int gesamt = 0;
    for (int aktuellerZugriff : zugriffeInStunde){
If(gesamt > aktuellerZugriff){
return gesamt;
}else{
return false;
}
 
Zuletzt bearbeitet von einem Moderator:

Devanther

Top Contributor
Java:
public int aktivsteStunde() {
   
    for (int aktuellerZugriff : zugriffeInStunde){
If (aktuellerZugriff > vorheriger aktuellerZugriff){
return aktuellerZugriff;
}else{
return false;
}

Oder muss ich da irgendwo mit == vergleichen?
Wie schreibe ich das so, dass mit vorheriger aktuellerZugriff verglichen wird.
Also mit dem letzen Wert, der durchlaufen wird, verglichen wird.
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Was ist an der Schleife falsch?
Es wurde dir schon gesagt du sollst eine for-Schleife verwenden und keine foreach-Schleife.
Für mich ist das zumindest etwas Logik!
Nein nur herumraten ;)
Oder muss ich da irgendwo mit == vergleichen?
Du sollst die aktivste Stunde suchen sprich das Maximum/das Größte -> warum also sollte man mit "==" vergleichen? Nicht raten, sondern denken!
Wie schreibe ich das so, dass mit vorheriger aktuellerZugriff verglichen wird.
Indem du eine normale for-Schleife verwendest und auf die entsprechenden Indexe zugreifst

Dein aktueller Code macht so keinen Sinn, beim 1.Schleifendurchlauf prüft er die Bedingung ... egal ob diese wahr oder falsch ist -> du kommst zu einem "return" und die Methode wird verlassen. Das "return" kann logischerweise erst nach der Schleife kommen, da du alle Elemente des Arrays überprüfen musst!
 

Harry Kane

Top Contributor
Für mich ist das zumindest etwas Logik!
Stimme Joose zu. Wenn das eine Aufgabe wäre, für die man in einer Klausur 10 Punkte bekommen könnte, würde ich für deinen Code 1 Punkt geben:
- Logik unsinnig
- Syntaxfehler
- An einer Stelle wird ein int zurückgegeben, an einer anderen Stelle ein boolean.
Den eine Punkt gäbe es nur dafür, das du offenbar eine leise Ahnung hast, was zu tun wäre, aber keine Ahnung hast, wie man das in Java-Code formuliert.
Hier mal ein Programmlaufplan in Prosa:
Code:
Deklariere zwei int Variablen:
maximaleAnzahlAnZugriffenProStunde, Anfangswert 0
stundeMitDerMaximalenAnzahlAnZugriffen, Anfangswert -1
Gehe mit einer for-Schleife über alle Einträge in zugriffeInStunde
Die Laufvariable habe den Namen i
    Überprüfe den i-ten Eintrag in zugriffeInStunde
    Falls der i-te Eintrag größer ist als maximaleAnzahlAnZugriffenProStunde,
        Weise maximaleAnzahlAnZugriffenProStunde den Wert vom i-ten Eintrag zu und
        Weise stundeMitDerMaximalenAnzahlAnZugriffen den Wert von i zu
    Ende der Überprüfung des i-ten Eintrags
Ende der for-Schleife
Gebe stundeMitDerMaximalenAnzahlAnZugriffen zurück.
Der Rückgabewert -1 bedeutet, dass gar keine Zugriffe stattgefunden haben
 

Devanther

Top Contributor
So, for Schleife:

Code:
public int aktivsteStunde() {
 
    for (int stunde = 0; stunde < zugriffeInStunde.lenght; stunden++){

Jetzt wird das ganze Array durchlaufen!
Bis hier hin richtig?
Es wird ein int Wert (Stunde) mit einem Array verglichen, es wurde hier geschrieben, dass das falsch ist.
Aber genau diese Schleife steht im Bluej Buch.
Oder ist das gar kein Array, zugriffeInStunde.lenght?
Und dann noch if Anweisung + return statement?
 

mrBrown

Super-Moderator
Mitarbeiter
Jetzt wird das ganze Array durchlaufen!
ja, richtig.

Es wird ein int Wert (Stunde) mit einem Array verglichen, es wurde hier geschrieben, dass das falsch ist.
Es ist falsche, weil man eben nicht einen Wert mit einer Liste von Werten vergleichen kann.
Oder, was ist größer: 17 oder [13,36,31,8,2,7]?

Aber genau diese Schleife steht im Bluej Buch.
Ja, aber ohne den Vergleich.

Und dann noch if Anweisung + return statement?
Ja, im wesentlichen...
 

Devanther

Top Contributor
Code:
for (int stunde = 0; stunde < zugriffeInStunde.lenght; stunden++){

Das steht genau so im Buch!!!
Warum ist es im Buch richtig und hier falsch?

for (int stunde = 0; stunde < 24; stunden++){

Kann man nicht einfach 24 Schreiben? Man weiss ja, dass die Schleife
in der Zukunft 24 mal durchlaufen werden muss.
Dann vergleich man 2 int Werte miteinander.

If (stunde > vorherigere Stunde){
return stunde;
}else{
return;
}
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter

Devanther

Top Contributor
So ist es auch richtig! Falsch waren bei dir andere Dinge.

Ja, was war bei mir falsch? Meinst du dass mit der IF Anweisung und return?

Code:
for (int stunde = 0; stunde < zugriffeInStunde.lenght; stunden++){

Also halten wir fest, das ist richtig!?
Jetzt muss ich mir noch die IF Anweisung und return überlegen?

Warum ist zugriffeInStunde ein Array und zugriffeInStunde.lenght ein int?
 

Harry Kane

Top Contributor
Code:
for (int stunde = 0; stunde < zugriffeInStunde.lenght; stunden++){
Also halten wir fest, das ist richtig!?
Nein. Du hast es geschafft, in einer Zeile zwei Fehler unterzubringen. Es muss "length" statt "lenght" heissen, und "stunde++" statt "stunden++".
Warum ist zugriffeInStunde ein Array und zugriffeInStunde.lenght ein int?
zugriffeInStunde hast du selber als Array deklariert, und zugriffeInStunde.length ist die Länge des Arrays bzw. die Anzahl der Felde. Was sollte zugriffeInStunde.length anderes sein als ein int? Ein double ? Oder gar ein String? Zählst du deine Schuhe "eins, zwei, drei" oder "rot, grün, gelb" ?
 

Devanther

Top Contributor
zugriffeInStunde hast du selber als Array deklariert

Ja, wo und wie das?
Code:
public int aktivsteStunde() {
for (int stunde = 0; stunde < zugriffeInStunde.length; stunde++){

Wie gehts weiter?

Code:
If (stunde > vorherigere Stunde){
}
{
return stunde;
}else{
return vorherige Stunde;
}
 

Devanther

Top Contributor
Deklariere zwei int Variablen:
maximaleAnzahlAnZugriffenProStunde, Anfangswert 0
stundeMitDerMaximalenAnzahlAnZugriffen, Anfangswert -1
Gehe mit einer for-Schleife über alle Einträge in zugriffeInStunde
Die Laufvariable habe den Namen i
Überprüfe den i-ten Eintrag in zugriffeInStunde
Falls der i-te Eintrag größer ist als maximaleAnzahlAnZugriffenProStunde,
Weise maximaleAnzahlAnZugriffenProStunde den Wert vom i-ten Eintrag zu und
Weise stundeMitDerMaximalenAnzahlAnZugriffen den Wert von i zu
Ende der Überprüfung des i-ten Eintrags
Ende der for-Schleife
Gebe stundeMitDerMaximalenAnzahlAnZugriffen zurück.
Der Rückgabewert -1 bedeutet, dass gar keine Zugriffe stattgefunden haben

-----------------------------------------------------------------------------------------
Klasse Protokollauswerter:
Code:
/**
* Eine Klasse, die das Protokoll eines Webservers
* in Hinsicht auf Zugriffe pro Stunde auswertet.
*
* @author David J. Barnes und Michael Kölling.
* @version 31.07.2011
*/
public class ProtokollAuswerter
{
    // Hier werden die Zugriffe für die Stunden gehalten
    private int[] zugriffeInStunde;
    // Verwendung eines LogdateiLesers
    private LogdateiLeser leser;
   
    private int stunde;
   
    private int maximaleAnzahlAnZugriffenProStunde = 0;
   
    private int stundeMitDerMaximalenAnzahlAnZugriffen = -1;
   
    /**
     * Erzeuge ein Exemplar, das die Zugriffe in den
     * Stunden eines Tages zählt.
     */
    public ProtokollAuswerter(String Sebastian)
    {
        // das Array-Objekt erzeugen, das die Zugriffe
        // in den einzelnen Stunden eines Tages zählt.
        zugriffeInStunde = new int[24];
        // Den Leser für die Logdatei erzeugen.
        leser = new LogdateiLeser(Sebastian);
    }
   
    /**
     * Analysiere die in der Logdatei erfassten Zugriffsdaten.
     */
    public void analysiereStundendaten()
    {
        while(leser.hasNext()) {
            Logeintrag eintrag = leser.next();
            int stunde = eintrag.gibStunde();
            zugriffeInStunde[stunde]++;
        }
    }
    public int anzahlZugriffe() {

    int gesamt = 0;
    for (int aktuellerZugriff : zugriffeInStunde){
         gesamt = gesamt + aktuellerZugriff;
    }
    return gesamt;
    }
   
   
    public int aktivsteStunde() {
   
    for (int i = 0; i < zugriffeInStunde.lenght; i++){
        If(i > maximaleAnzahlAnZugriffenProStunde){
             maximaleAnzahlAnZugriffenProStunde = i &
             stundeMitDerMaximalenAnzahlAnZugriffen = i;
            }
       
           
    }    return stundeMitDerMaximalenAnzahlAnZugriffen;
    }
   
   
    /**
     * Gib die Anzahl der Zugriffe in den Stunden eines
     * Tages nach Stunden sortiert auf der Konsole aus.
     * Diese Werte sollten zuerst mit einem Aufruf von
     * 'analysiereStundendaten' berechnet werden.
     */
    public void stundendatenAusgeben()
    {
        System.out.println("Stunde: Zugriffe");
        for(int stunde = 0; stunde < zugriffeInStunde.length; stunde++) {
            System.out.println(stunde + ": " + zugriffeInStunde[stunde]);
        }
    }
   
    /**
     * Gib die Zeilen der Logdatei auf der Konsole aus.
     */
    public void logdateiAusgeben()
    {
        leser.datenAusgeben();
    }
}

^^Die Methode aktivsteStunde() wird nicht ganz richtig sein, oder?
http://imgur.com/a/KgYAj
Da kommt noch ne Fehlermeldung.
Was ist davon richtig ? Was falsch?
Ist wusste nicht so genau was mit "iten-Eintrag" gemeint ist.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben