Erste Schritte Protokollauswerter

Status
Nicht offen für weitere Antworten.

Harry Kane

Top Contributor
1. Die beiden Variablen maximaleAnzahlAnZugriffenProStunde und stundeMitDerMaximalenAnzahlAnZugriffen sollen nicht als Instanzvariablen deklariert sein, sondern als lokale Variablen in der aktivsteStunde-Methode.
2. Hinweis von JStein beachten.
3. Richtig lachen musste ich, als ich gesehen habe, dass du das "und", mit dem ich in meiner Prosa die beiden Zuweisungssätze verbunden habe, tatsächlich in einen Java-Operator ("&") mit der Bedeutung "und" umgewandelt hast (der leider an der Stelle überhaupt nicht passt). Tatsächlich meinte ich nur zwei ganz normale Zuweisungszeilen:
Java:
maximaleAnzahlAnZugriffenProStunde = zugriffeInStunde[i];
stundeMitDerMaximalenAnzahlAnZugriffen = i;
Warum 2 int Variablen überhaupt?
Weil du dir sowohl die Anzahl der Zugriffe und die Stunde in der sie erfolgten, merken musst.
 

Joose

Top Contributor
Code:
    /**
     * 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]);
        }
    }

Das ist eine Methode der Klasse Protokollauswerter, war diese Methode schon gegeben oder hast du diese selber geschrieben?
Wenn du sie nicht geschrieben hast, dann frage ich mich ob dir überhaupt den Code anschaust der schon gegeben ist und probierst ihn zu verstehen ....

Da steht genau die Schleife die du brauchst .... einzig der Schleifenbody muss natürlich anders sein. Aber da hättest du ruhig etwas code abschauen können.

Du hattest eine Frage:
Warum ist zugriffeInStunde ein Array und zugriffeInStunde.lenght ein int?
Diese wurde dir beantwortet, aber du hast mit keinem Wort bisher erwähnt ob dir die Antwort klar ist oder nicht.
 

Harry Kane

Top Contributor
dann frage ich mich ob dir überhaupt den Code anschaust der schon gegeben ist und probierst ihn zu verstehen
Anschauen und probieren vermutlich schon, aber ist das nicht von Erfolg gekrönt. Zumindest deuten das in dem screenshot erkennbare großgeschriebene If und das falsch geschriebene "lenght" darauf hin.
 

Devanther

Top Contributor
Code:
public int aktivsteStunde() {
   
    int maximaleAnzahlAnZugriffenProStunde = 0;
   
    int stundeMitDerMaximalenAnzahlAnZugriffen = -1;     
       
    for (int i = 0; i < zugriffeInStunde.length; i++){
        if(i > maximaleAnzahlAnZugriffenProStunde){
             maximaleAnzahlAnZugriffenProStunde = zugriffeInStunde[i];
             stundeMitDerMaximalenAnzahlAnZugriffen = i;
            }
       
           
    }    return stundeMitDerMaximalenAnzahlAnZugriffen;
    }

Ist das jetzt so richtig? Es kommt keine Fehlermeldung.
Wenn ich die Methode aktivsteStunde() aufrufe, dann wird immer der Wert "23" zurückgegeben.
Wie teste ich, ob die Methode richtig funktioniert?
 

Harry Kane

Top Contributor
Was ich geschrieben habe:
Code:
Überprüfe den i-ten Eintrag in zugriffeInStunde
Falls der i-te Eintrag größer ist als maximaleAnzahlAnZugriffenProStunde,
was du überprüfst
Code:
Überprüfe den i-ten Eintrag in zugriffeInStunde
Falls i größer ist als maximaleAnzahlAnZugriffenProStunde,
 

Devanther

Top Contributor
Code:
public int aktivsteStunde() {
   
    int maximaleAnzahlAnZugriffenProStunde = 0;
   
    int stundeMitDerMaximalenAnzahlAnZugriffen = -1;     
       
    for (int i = 0; i < zugriffeInStunde.length; i++){
        if(zugriffeInStunde[i] > maximaleAnzahlAnZugriffenProStunde){
             maximaleAnzahlAnZugriffenProStunde = zugriffeInStunde[i];
             stundeMitDerMaximalenAnzahlAnZugriffen = i;
            }
       
           
    }    return stundeMitDerMaximalenAnzahlAnZugriffen;
    }

Wenn ich die Methode aufrufe, kommt jetzt -1 !
Wie teste ich, ob die Methode funktioniert?
 

Harry Kane

Top Contributor
Wie teste ich, ob die Methode funktioniert?
Eine neue Instanz von LogdateiErzeuger erstellen, und dessen Methode erzeugeDatei(String dateiname, int anzahlEintraege) aufrufen. Falls die methode true zurückgibt, eine neue Instanz von ProtokollAuswerter erstellen und den verwendeten Dateinamen als Parameter des ProtokollAuswerter-Konstruktors verwenden. Dann die Methode analysiereStundendaten der ProtokollAuswerter-Instanz aufrufen, und anschliessend aktivsteStunde(). Das Ergebnis notieren. Dann die vom LogdateiErzeuger erzeugte Datei mit einem Texteditor öffnen, und die Auswertung von Hand machen (bei wenigen Logeinträgen sollte das problemlos möglich sein).
 

Devanther

Top Contributor
Die vom LogdateiErzeuger erzeugte Datei heisst genauso wie der verwendete Dateiname?
Wenn ich einen Namen "Karolina" als Dateiname wähle und 12 Einträge wähle, dann kommt
in der Methode anzahlZugriffe() richtigerweise der Wert 12 und in der Methode aktivsteStunde()
der Wert 12.
Wenn ich die Datei "Karolina" mit dem Texteditor öffne, kommt

2011 01 03 04 49
2011 01 18 16 23
2011 04 18 20 03
2011 05 12 19 47
2011 07 13 01 01
2011 07 24 02 29
2011 08 13 20 08
2011 08 20 12 00
2011 09 06 09 24
2011 10 27 12 03
2011 11 26 12 13
2011 12 12 06 06

also, alles richtig so?
 

Devanther

Top Contributor
Weitere Aufgabe:
Fügen Sie Protokollauswerter eine Methode ruhigsteStunde, die die Stunde mit den wenigsten
Aufrufen liefern soll. Hinweis: Dies klingt fast identisch zur vorherigen Übung, aber es gibt eine
kleine Falle für die Unaufmerksamen. Gehen Sie sicher, dass ihre Methode mit Daten arbeitet,
bei denen jede Stunde einen Wert größer als 0 hat.

Code den man verändern muss:
Code:
public int aktivsteStunde() {
   
    int maximaleAnzahlAnZugriffenProStunde = 0;
   
    int stundeMitDerMaximalenAnzahlAnZugriffen = -1;     
       
    for (int i = 0; i < zugriffeInStunde.length; i++){
        if(zugriffeInStunde[i] > maximaleAnzahlAnZugriffenProStunde){
             maximaleAnzahlAnZugriffenProStunde = zugriffeInStunde[i];
             stundeMitDerMaximalenAnzahlAnZugriffen = i;
            }
       
           
    }    return stundeMitDerMaximalenAnzahlAnZugriffen;
    }

Müssen beide lokale Variablen auf <0 geprüft werden?
 

Devanther

Top Contributor
Ich hab noch eine Frage zur letzen Aufgabe, zur if Anweisung.
(zugriffeInStunde[i] , was ist das für eine Variable? Wie soll man selbst auf die Idee kommen,
dass diese Variable richtig sein muss? Was tut die?
Java:
maximaleAnzahlAnZugriffenProStunde = zugriffeInStunde[i];
             stundeMitDerMaximalenAnzahlAnZugriffen = i;
Warum heisst es hier einmal = zugriffeInStunde[i]; und einmal = i?
Warum diese Unterscheidung an dieser Stelle!!!???

Was ist der Unterschied zwischen zugriffeInStunde[i] und i ?

Erstmal diese Aufgabe GANZ verstehen und dann die nächste, ruhigste Stunde().[/i][/i][/i]
 
Zuletzt bearbeitet von einem Moderator:

Leon_2001

Aktives Mitglied
Java:
public void unterschied(){
  int[] irgendwelcheZahlen =     {4,7,20,15}; // Deklaration eines int-Arrays
Das
Java:
 //For Schleife, die die Zählervariable ausgibt
 for(int i = 0; i<10; i++){
    System.out.println(i);
 }
 // nach dem Ende der Schleife hast du die Werte 0 - 9 untereinander ausgegeben
Java:
 //for schleife, die das Array ausgibt
for(int i = 0; i < irgendwelcheZahlen.length; i++){
    System.out.println(irgendwelcheZahlen[i]);
  }
//Ausgabe untereinander 4,7,15,20
}
Ich hoffe das stimmt soweit alles ... Auf dem Handy schwer zu überblicken...

1. Was ist/macht irgendwelcheZahlen.length?

Gegeben sei der String s = "abcd ";
Was macht s.length()?
Was ist der grundlegende Unterschied zwischen diesen zwei ähnlich aussehenden Zeilen? (irgendwelcheZahlen.length und s.length())

2. Warum sollte i < irgendwelcheZahlen.length sein? Und nicht z.B. <=?

3. Was macht irgendwelcheZahlen[i]?
Hinweis: Was würde den irgendwelcheZahlen[1] oder irgendwelcheZahlen[2] machen?

4. Was kann man mit dem int 6 vergleichen? Zur Auswahl:
irgendwelcheZahlen, i , irgendwelcheZahlen[i], irgendwelcheZahlen[6], int 10, double 6.5, String s aus Aufgabe1?[/i][/i]
 
Zuletzt bearbeitet von einem Moderator:

Leon_2001

Aktives Mitglied
edit: scheinbar kann ich das i in eckigen Klammern nicht darstellen ... sowohl in der zweiten for Schleife soll dies hinter irgendwelcheZahlen bei der Ausgabe als auch bei Aufgabe 4 beim ersten...
 

Flown

Administrator
Mitarbeiter
Bitte wenn ihr Code hier postet dann verwendet Code-Tags: [code=java]//JAVA CODE HERE[/code]
Wenn es ein inline-Code (in einem Satz) sein sollte dann bitte: [icode]//INLINE CODE HERE[/icode]
 

Leon_2001

Aktives Mitglied
danke sehr :) Jetzt sind die Fehler auch behoben. Ich werde in Zukunft versuchen, Gebrauch von den Code Tags zu machen.
 

Devanther

Top Contributor
Sorry, das beantwortet aber leider nicht meine Fragen.

Wäre gut, wenn mir jemand die letze Aufgabe erklären könnte
bzw. wäre es auch gut, wenn mir jemand nen Tipp geben kann,
wie ich die Methode ruhigsteStunde() schreiben kann.
 

Devanther

Top Contributor
Kann jemand die Grundlagen nochmal hinschreiben?
Ich sehe mir die Methode an, kann sie aber nicht nachvollziehen....!
 

JStein52

Top Contributor
Es wurde alles schon einmal geschrieben. Du musst es nur lesen. Mehr kann dir jetzt keiner mehr helfen.
 

Leon_2001

Aktives Mitglied
Sorry, das beantwortet aber leider nicht meine Fragen.

Wäre gut, wenn mir jemand die letze Aufgabe erklären könnte
bzw. wäre es auch gut, wenn mir jemand nen Tipp geben kann,
wie ich die Methode ruhigsteStunde() schreiben kann.
Das beantwortet natürlich deine Fragen ... Du hast einen post vorher geschrieben "Bevor ich die neue Aufgabe anfange, will ich erstmal die alte verstehen" (so sinngemäß) und hast Fragen gestellt z.B. Was array macht...
 

Harry Kane

Top Contributor
Ich sehe mir die Methode an, kann sie aber nicht nachvollziehen....!
Bisher war es nur so, dass du nicht imstande warst, aus einer Aufgabenstellung ein Konzept zu entwickeln, und aus dem Konzept einen Code. Wenn der Code aber erstmal geschrieben war, hatte ich schon den Eindruck, dass du ihn verstehst.
Jetzt ist es so, dass du auch den fertigen Code nicht verstehst. Ein klarer Rückschritt auf einem niedrigen Niveau.
Die Vermutung, dass du ein Troll bist, schien mir angesichts der scheinbaren Fortschritte in den letzten Threads zunehmend weniger plausibel, jetzt halte ich sie wieder für sehr wahrscheinlich. Wenn dir nach über einem halben Jahr mit Java als Frage nicht mehr einfällt als
Kann jemand die Grundlagen nochmal hinschreiben?
ist wirklich Hopfen und Malz verloren.
 

Meniskusschaden

Top Contributor
Die Lösung wurde geschrieben, ich habe es dann übernommen. Ohne zu verstehen, warum...!
Entgegen der Meinung praktisch aller anderen warst du hier (in einem deiner anderen Threads) noch überzeugt, dir würde alles klar werden, sobald du die Lösung siehst. Was ist denn nun damit?
Inzwischen hast du viele weitere Lösungen vorgesetzt bekommen und bist kein Stück weiter. Ich verstehe nicht, warum du immer wieder in diesem Forum fragst, wenn du ohnehin keinen Rat annehmen willst. Lerne einfach die Grundlagen.
 
X

Xyz1

Gast
Entgegen der Meinung praktisch aller anderen warst du hier (in einem deiner anderen Threads) noch überzeugt
Auch hier habt ihr wieder locker über 1.000 Aufrufe geschafft, nun muss der Priester wieder ran. :D

Niemand hat die Zeit/Lust/kostenlos hier eine vollständige Einführung zu schreiben. Diese benötigst Du aber fürs Verständnis, was Dir hier an Code angeboten wird.

Oder anders formuliert:
A -> B -> C
A=Einführung gelesen
B=Hilfestellung bekommen
C=Hilfestellung verstanden
C setzt B voraus, B setzt A voraus.

(Ich nehm hier einmal closed world assumption an. Gilt in der Prädikatenlogik eigentlich nicht.)
 

Devanther

Top Contributor
Das
Code:
zugriffeInStunde[i]
ist die Stelle im Array zugriffeInStunde.length ?
der i-te Eintrag sozusagen?
Und das i ? Ohman
Das steht in keinem Buch geschrieben, was der Unterschied zwischen
Code:
zugriffeInStunde[i]
und i sein soll....!
int stundeMitDerMaximalenAnzahlAnZugriffen = -1;
Warum wird hier mit -1 deklariert?
Den Rest der Methode verstehe ich schon.
Nur 2 Sätze dazu! Ich brauche keine komplette Einführung, die kann ich schon!

Methode: ruhigsteStunde()
Gehen Sie sicher, dass ihre Methode mit Daten arbeitet,
bei denen jede Stunde einen Wert größer als 0 hat.

Muss ich beide Variablen auf >0 testen? In der if Anweisung?
Oder einfach bei der Deklaration der lokalen Variablen einen Wert größer 0 angeben?





 
X

Xyz1

Gast
Nur 2 Sätze dazu! Ich brauche keine komplette Einführung, die kann ich schon!
Nein, kannst du ja noch nicht... Sonst erübrigt sich ja Deine Frage(n).
-1 und > 0 ist einfach KONVENTION.
Genauso wie deutsche, nichtsagende, zu lange, nichteinheitliche Variablennamen NICHT KONVENTION sind. :rolleyes:
 

Devanther

Top Contributor
Also im BlueJ Buch steht es nicht und in "Java ist auch eine Insel" auch nicht
Ich habe in beiden Büchern nur das gefunden:
Die Anzahl der Elemente, die ein Array aufnehmen kann, wird Größe beziehungsweise
Länge genannt und ist für jedes Array-Objekt in der frei zugänglichen Objektvariablen
length gespeichert.
Alle Arrays enthalten ein Datenfeld length, dass die festgelegte Größe eines Arrays hält.

Was aber
Code:
zugriffeInStunde[i]
bzw. i sein soll, steht nicht.
i müsste der Wert sein, der durchlaufen wird, solang wie die Schleife lang ist.
Indem Fall nimmt i einen Wert von 0 bis 23 ein.
Aber
Code:
zugriffeInStunde[i]
steht nirgendwo.

Es sind beides 2 unterschiedliche Variablen?
Beide Variablen enthalten unterschiedliche Werte?

Code:
zugriffeInStunde[i]
hätte man auch anders nennen können?

Weil man sowohl die Anzahl der Zugriffe und die Stunde in der sie erfolgten, merken muss. Deswegen diese 2 unterschiedliche Namen.

Sollte das richtig sein, wie fange ich die ruhigsteStunde() Methode an?
Siehe letze Seite.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
in "Java ist auch eine Insel" [steht es] auch nicht
Dann lies dir mal Kapitel 3.8.5 durch. Ich fürchte allerdings, dass der Nutzen für dich nur sehr begrenzt sein wird, weil da das Array zugriffeInStunde tatsächlich nicht vorkommt, und ich nicht erwarte, dass du das, was da über die arrays
primes und numbers geschrieben steht, auf deine Aufgabe übertragen kannst.
 

Devanther

Top Contributor
Ja, nächste Aufgabe.

Methode: ruhigsteStunde()
Gehen Sie sicher, dass ihre Methode mit Daten arbeitet,
bei denen jede Stunde einen Wert größer als 0 hat.

Muss ich beide Variablen auf >0 testen? In der if Anweisung?
Oder einfach bei der Deklaration der lokalen Variablen einen Wert größer 0 angeben?
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Schau dir mal diese Beispieldaten an. Welches ist die ruhigste Stunde, und wie bist du auf die Lösung gekommen?
Code:
Stunde   Zugriffe
1             2
2             0
3             0
4             0
5             2
6             7
7             7
8             8
9            12
10          5
11          1
12          18
13          14
14           7
15          6
16          4
17          2
18          14
19          16
20          22
21          24
22          17
23          4
24          3
 
X

Xyz1

Gast
Ich les jetzt etwas von Arrays, erstes und letztes Element, dann könntest du das eigentlich auch so machen, so hätte ich das gemacht, sortieren:
Java:
class StundeZugriff implements Comparable<StundeZugriff> {

    static LinkedList<StundeZugriff> list = new LinkedList<>();

    int index;
    int stunde;
    int zugriff;

    StundeZugriff(int index, int stunde, int zugriff) {
        this.index = index;
        this.stunde = stunde;
        this.zugriff = zugriff;
    }

    public static void main(String[] args) {
        /*
         * Daten von Harry....
         */
        String string
                = "Stunde   Zugriffe\n"
                + "1             2\n"
                + "2             0\n"
                + "3             0\n"
                + "4             0\n"
                + "5             2\n"
                + "6             7\n"
                + "7             7\n"
                + "8             8\n"
                + "9            12\n"
                + "10          5\n"
                + "11          1\n"
                + "12          18\n"
                + "13          14\n"
                + "14           7\n"
                + "15          6\n"
                + "16          4\n"
                + "17          2\n"
                + "18          14\n"
                + "19          16\n"
                + "20          22\n"
                + "21          24\n"
                + "22          17\n"
                + "23          4\n"
                + "24          3\n";

        handleString(string);
        printMinHour();
        printMaxHour();

    }

    static void printMinHour() {
        System.out.println(list.get(getMinHour()));
    }

    static void printMaxHour() {
        System.out.println(list.get(getMaxHour()));
    }

    static int getMinHour() {
        StundeZugriff[] array = list.toArray(new StundeZugriff[0]);
        Arrays.sort(array);
        return array[0].index;
    }

    static int getMaxHour() {
        StundeZugriff[] array = list.toArray(new StundeZugriff[0]);
        Arrays.sort(array);
        return array[array.length - 1].index;
    }

    @Override
    public int compareTo(StundeZugriff o) {
        return zugriff - o.zugriff;
    }

    @Override
    public String toString() {
        return "StundeZugriff{" + Arrays.toString(new int[]{index, stunde, zugriff}) + "}";
    }
}

Java:
    /**
     * Diese Funktion ist nicht so wichtig....
     *
     * @param string
     */
    static void handleString(String string) {
        Scanner scanner = new Scanner(string);
        try {
            scanner.nextLine();
            while (true) {
                String nextLine = scanner.nextLine();
                Pattern pattern = Pattern.compile("(\\d+) +(\\d+)");
                Matcher matcher = pattern.matcher(nextLine);
                if (matcher.find()) {
                    StundeZugriff stundeZugriff = new StundeZugriff(list.size(), Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)));
                    list.add(stundeZugriff);
                }
            }
        } catch (NoSuchElementException e) {
        }
    }

Und die Ausgabe wäre:
Code:
StundeZugriff{[1, 2, 0]}
StundeZugriff{[20, 21, 24]}

Java 8 bietet aber noch mehr an!

Eigentlich ist Java dafür auch falsch, zB Python ist in so etwas besser!
 
X

Xyz1

Gast
kann mal jemand den Beitrag vom "Wissenden" in die OT-Tags einschliessen
Welchen denn?
Gleichzeitig müssten deine Provokationen und Streitigkeiten gelöscht werden. ;) Dann ist die Parität wieder gegeben.

Nanu, seit wann verwendest du denn scanner
Naja, viiiielleicht hätte ich das nicht so geschrieben, und dann dachte ich, Hey, verwendest du mal die Klasse Scanner.... :confused:

Also wenn das verwirrend sein könnte, dann wieder raus. :(
 

Devanther

Top Contributor
Schau dir mal diese Beispieldaten an. Welches ist die ruhigste Stunde, und wie bist du auf die Lösung gekommen?

Die ruhigste Stunde ist Stunde 11, 1 Zugriff.
Stunde 11 hat den kleinsten Zugriff aber >0.
Es soll ja nur mit Werten >0 gearbeitet werden.

1. Man durchsucht das Array Zugriffe nach dem kleinsten Wert aber größer 0
2. Man gibt die aus dem Array Stunde die dazugehörige Stunde zurück.

Das sind doch beides Arrays, oder?
Liste mit Zahlen.

Ist das richtig soweit?
 

JStein52

Top Contributor
Klingt gut. Und ist ja so ähnlich wie die Methode vorher. Jetzt versuch halt mal das mit der anderen Methode als Beispiel umzusetzen.
 

Devanther

Top Contributor
Jetzt versuch halt mal das mit der anderen Methode als Beispiel umzusetzen.

Wie durchsuche ich das Array zugriffeInStunde nach dem kleinsten Wert?

Code:
public int ruhigsteStunde() {
  
 int maximaleAnzahlAnZugriffenProStunde = 0;
   
    int stundeMitDerMaximalenAnzahlAnZugriffen = -1;     
       
    for (int i = 0; i > zugriffeInStunde.length; i--){
        if(zugriffeInStunde[i] > maximaleAnzahlAnZugriffenProStunde){
             maximaleAnzahlAnZugriffenProStunde = zugriffeInStunde[i];
             stundeMitDerMaximalenAnzahlAnZugriffen = i;
            }
       
           
    }    return stundeMitDerMaximalenAnzahlAnZugriffen;
    }
    }

Ich müsste erst wissen, was dass
Code:
 zugriffeInStunde[i]
ist.

Ohman, ich habe ne Stunde überlegt. Muss falsch sein, leider.



 
X

Xyz1

Gast
dass er auch nur irgendein Wort
Ja gut in den Anfängerbereich passt das nicht unbedingt....

Ich kann das nicht lesen, die Variablennamen sind zu lang...
Aber erstmal hat quasi DREI Werte, den Index, die Stunde und Zugriff(e).... Diese muss er sich bewusstmachen, Laufvariable usw.

Wo möchtet ihr denn anfangen? Datentyp Name Wert Zuweisung Inkrementierung Schleife Bedingung Array Arrayzugriff Arrayzuweisung lesen schreiben zurückgeben Methode Rückgabe Sichtbarkeit Objekt Instanz Instanzvariable Instanzmethode Syntax Semantik Richtigkeit Vollständigkeit Minimalität Optimalität....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben