Erste Schritte Klausurvorbereitung

Sol000000

Mitglied
Hallo an alle, ich bin inzwischen im LK Informatik Klasse 12 angekommen und muss feststellen, dass mich Informatik zwar sehr interessiert, ich aber durch meinen Lehrer kaum etwas nachvollziehen kann und wir meiner Meinung nach falsch vorangehen.

Bevor ich mich jetzt aber übermäßig beschwere, muss ich zum eigenen Entsetzten sagen, dass ich für ein LK Fach auch einfach zu wenig dafür mache. Dennoch muss ich meine Klausurvorbereitung jetzt einmal in Schwung bringen.

Dafür werden wir eine kleine (*simple) Aufgabe erhalten, eine Klasse mit Attributen und Methoden in Java-Syntax zu implementieren.

Dazu habe ich eine Vorbereitungsklausur erhalten, dort sollen wir eine Klasse (Highscore) mit folgenden Eigenschaften und Fähigkeiten implementieren:

Private Atrribute
namen als String-Array der Größe 10
punkte als integer-Array der Größe 10

Öffentliche Methoden
alleNamenAusgeben(), die alle Namne des Arrays mittels System.out.Println() ausgibt,
gibHighscore(), die den höchsten Punktestand zurückgibt und
gibBesten(), die den Namen der Person mit dem höchsten Punktestandard zurückgibt.

Erste Versuche waren dies:

Java:
public class Highscore {
    public static void main (String[]args) {
        String[] namen = new String[10];
        namen[0] = "Lisa";
        namen[1] = "Erik";
        namen[2] = "Patrick";
        namen[3] = "Manfred";
        namen[4] = "Johannes";
        namen[5] = "Sebastian";
        namen[6] = "Makoto";
        namen[7] = "Benjamin";
        namen[8] = "Philipp";
        namen[9] = "Tobias";
        int[] punkte = new int[10];
        
        alleNamenAusgeben();
        gibHighscore();
        gibBesten();
    }
    
    public static void alleNamenAusgeben() {
        System.out.println(Integer.parseInt())
        }
    
    public static void gibHighscore() { //Addieren der punkte vom array mit return von Summe der Werte
    }
    
    public static void gibBesten() { //Addieren der Werte von jedem Spieler und vergleichen zwischen Punktestand der jeweiligen namen
        
    }
}

Mein Problem ist, egal wie lange ich mich mit dem Ganzen beschäftige... Ich komme nicht darauf, wie ich den Code schreiben soll. Eine weitere Aufgabe ist, Code zu analysieren. Das ist z.B. kein Problem für mich, da ich grundsätzlich verstehe/verstanden habe, was, wie und wann etwas passiert. Kann mir da jemand weiterhelfen?

LG
 

Jw456

Top Contributor
Für den Anfang alle Namen ausgeben.
Was braucht man, wenn man ein Array durchlaufen will und jede Position im Array ausgeben will?

Dein Array "namen" hast du gefüllt deine "punkte" nicht, zum testen solltes du das auch tun.
 

KonradN

Super-Moderator
Mitarbeiter
Das Problem ist doch erst einmal, dass Du keine privaten Attribute hast. Das, was die Aufgabe fordert, kann erst einmal 1:1 in Code umgesetzt werden (also ohne die eigentliche Funktionalität).

Schau Dir also noch einmal an, wie eine Klasse mit Attributen zu implementieren ist.
 

Sol000000

Mitglied
Java:
public class Highscore {
    public static void main (String[]args) {
        String[] namen = new String[10];
        namen[0] = "Lisa";
        namen[1] = "Erik";
        namen[2] = "Patrick";
        namen[3] = "Manfred";
        namen[4] = "Johannes";
        namen[5] = "Sebastian";
        namen[6] = "Makoto";
        namen[7] = "Benjamin";
        namen[8] = "Philipp";
        namen[9] = "Tobias";
        int[] punkte = new int[10];
        punkte[0] = 100;
        punkte[1] = 100;
        punkte[2] = 100;
        punkte[3] = 100;
        punkte[4] = 100;
        punkte[5] = 100;
        punkte[6] = 100;
        punkte[7] = 100;
        punkte[8] = 100;
        punkte[9] = 100;
        
        alleNamenAusgeben();
        gibHighscore();
        gibBesten();
    }
    
    public static void alleNamenAusgeben() {
        for (int i; i.length; i++)
        System.out.println(namen[i])
        }
    
    public static void gibHighscore() { //Addieren der punkte vom array mit return von Summe der Werte
    }
    
    public static void gibBesten() { //Addieren der Werte von jedem Spieler und vergleichen zwischen Punktestand der jeweiligen namen
        
    }
}

Ich benötige eine for-Schleife für das Durchlaufen des Arrays. Die for-Schleife ist aber nicht richtig, da ich ja nirgends ein i deklariert habe. Somit kann sich das ja auch nicht darauf beziehen...

Ansonsten könnte man es ja ganz extrem mit System.out.println(namen[0]); ... ausgeben.
 

Sol000000

Mitglied
Das Problem ist doch erst einmal, dass Du keine privaten Attribute hast. Das, was die Aufgabe fordert, kann erst einmal 1:1 in Code umgesetzt werden (also ohne die eigentliche Funktionalität).

Schau Dir also noch einmal an, wie eine Klasse mit Attributen zu implementieren ist.
Stimmt, eigentlich müsste vor die Arrays noch ein private... Aber ansonsten habe ich doch bereits alles, was in der Aufgabe steht, in Java-Syntax implementiert, oder nicht?
 

Jw456

Top Contributor
Alle User die gleiche Punktzahl 🤣

In deiner for von wo bis wohin soll sie denn laufen. Doch wohl von 0 und solange i keiner der Array länge ist.

Mit welchen Befehl bekommst du die Größe des Arrays?
 

Sol000000

Mitglied
Code:
[CODE=java]public class Highscore {
    public static void main (String[]args) {
        private String[] namen = new String[10];
        namen[0] = "Lisa";
        namen[1] = "Erik";
        namen[2] = "Patrick";
        namen[3] = "Manfred";
        namen[4] = "Johannes";
        namen[5] = "Sebastian";
        namen[6] = "Makoto";
        namen[7] = "Benjamin";
        namen[8] = "Philipp";
        namen[9] = "Tobias";
        
        private int[] punkte = new int[10];
        punkte[0] = 100;
        punkte[1] = 101;
        punkte[2] = 102;
        punkte[3] = 103;
        punkte[4] = 104;
        punkte[5] = 105;
        punkte[6] = 106;
        punkte[7] = 107;
        punkte[8] = 108;
        punkte[9] = 109;
       
        alleNamenAusgeben();
        gibHighscore();
        gibBesten();
    }
   
    public static void alleNamenAusgeben() {
        for (int i = 0; i.length; i++)
        System.out.println(namen[i])
        }
   
    public static void gibHighscore() { //Addieren der punkte vom array mit return von Summe der Werte
        for (int i = 0; i.length; i++)
        System.out.println(punkte[i])
    }
   
    public static void gibBesten() { //Addieren der Werte von jedem Spieler und vergleichen zwischen Punktestand der jeweiligen namen
       
    }
}
[/CODE]

Jaaa gut, vielleicht nicht als zu schlau, wenn man den Besten herausfinden möchte.😅 gibHighscore() sollte dementsprechend aber das Gleiche wie das alleNamenAusgeben() machen...?
 

KonradN

Super-Moderator
Mitarbeiter
Stimmt, eigentlich müsste vor die Arrays noch ein private... Aber ansonsten habe ich doch bereits alles, was in der Aufgabe steht, in Java-Syntax implementiert, oder nicht?
Nein, hast Du nicht.

Das merkst Du an diversen Dingen:
  • Du konntest kein private vor die Deklaration der Arrays schreiben
  • Du konntet auf die Array aus den anderen Methoden nicht zugreifen.

Daher noch einmal ganz eindringlich: Schau Dir an, wie Attribute gebaut werden. Das sind absolute Basics. Also Thema Instanzvariablen und Instanzmethoden. Da auch direkt der Hinweis: Da hat dann kein static etwas verloren!

Und in der Klasse ist - wenn Du diese umsetzt - erst einmal keine main methode! Die kannst Du also separat in einer anderen Methode machen, in der Du dann das, was Du in der Klasse Highscore geschrieben hast, testest.
 

Sol000000

Mitglied
Achso, indem ich die Arrays in der public void main deklariert habe, sind die Variablen auch public, ich muss sie also aus der main Methode herausnehmen, da ich ihnen sonst nicht den private Sichtbarkeitsmodifikator zuweisen kann.
Java:
public class Highscore {
        private String[] namen = new String[10];
        namen[0] = "Lisa";
        namen[1] = "Erik";
        namen[2] = "Patrick";
        namen[3] = "Manfred";
        namen[4] = "Johannes";
        namen[5] = "Sebastian";
        namen[6] = "Makoto";
        namen[7] = "Benjamin";
        namen[8] = "Philipp";
        namen[9] = "Tobias";
       
        private int[] punkte = new int[10];
        punkte[0] = 100;
        punkte[1] = 101;
        punkte[2] = 102;
        punkte[3] = 103;
        punkte[4] = 104;
        punkte[5] = 105;
        punkte[6] = 106;
        punkte[7] = 107;
        punkte[8] = 108;
        punkte[9] = 109;
     
    public void main (String[]args) {
        alleNamenAusgeben();
        gibHighscore();
        gibBesten();
    }
 
    public void alleNamenAusgeben() {
        for (int i = 0; i.length; i++)
        System.out.println(namen[i])
        }
 
    public void gibHighscore() { //Addieren der punkte vom array mit return von Summe der Werte
        for (int i = 0; i.length; i++)
        System.out.println(punkte[i])
    }
 
    public void gibBesten() { //Addieren der Werte von jedem Spieler und vergleichen zwischen Punktestand der jeweiligen namen
     
    }
}
 

Jw456

Top Contributor
Keine static Methoden

In der main ein Objekt von der Klasse erstellen.

Besser wäre auch das füllen der Array im Konstruktor.
 

KonradN

Super-Moderator
Mitarbeiter
Wie schreibst Du denn den Code? Ganz offensichtlich nicht in einer Entwicklungsumgebung. Das ist doch kein valider Code!

Statements sind nur im Rahmen einer Methode erlaubt. Deine Zuweisungen gehen so also nicht.
 

Sol000000

Mitglied
Ok, mit vielen Begriffen hier kann ich irgendwie nicht wirklich viel anfangen. Ein Objekt von der Klasse? Ich verstehe nicht, was ich da noch hinzufügen soll. Ich greife doch mit der Main Methode auf die einzelnen Methoden zu...?

Und welches Statement ist in keiner Methode...? Meinst du die Arrays, die in keiner Methode sind?
 

Jw456

Top Contributor
Das zb. ist im Klassenrumpf
namen[0] = "Lisa";


Und die Frage nach der Art wie du schreibst hast du nicht beantwortet.
Benutze eine IDE und nicht nur einenen Editor.
 

Sol000000

Mitglied
Aber was ist an namen[0] = "Lisa"; falsch?

Ich schreibe den Code aktuell hier über den Code-Editor, da ich aktuell keinen Zugriff auf eine IDE habe, da ich nicht am PC arbeite zur Zeit.
 

Sol000000

Mitglied
Ich glaube, ich sollte mich erst die nächsten Tage noch einmal mit der Wiederholung und Aufarbeitung der Basics beschäftigen und nicht mit etwas starten, was ich aktuell noch nicht leisten und verstehen kann. Trotzdem danke!
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du eine Klasse mit Attributen schreibst, dann sieht das generell so aus:

Java:
public class KlassenName {
    private int someAttribute;
    private String someOtherAttribute;
}

Befehle gehören in Methoden. Wenn Du also z.B. eine Instanzvariable initalisieren willst, dann kannst Du es im Konstruktor machen:
Java:
public class KlassenName {
    private int someAttribute;
    
    public KlassenName() {
        someAttribute = 5;
    }
}
 

temi

Top Contributor
Ein Objekt von der Klasse?
Eine Klasse ist nur eine Art von Bauplan, um sie verwenden zu können müssen i.d.R. Instanzen (Objekte) davon erstellt werden, z. B. Highscore hs = new Hightscore();. In der Variablen "hs" ist anschließend eine Instanz der Klasse Highscore enthalten (genauer gesagt handelt es sich um eine Referenz auf die Instanz der Klasse). Diese kannst du dann verwenden, z. B. hs.alleNamenAusgeben();
 

DefconDev

Bekanntes Mitglied
Ich glaube, ich sollte mich erst die nächsten Tage noch einmal mit der Wiederholung und Aufarbeitung der Basics beschäftigen und nicht mit etwas starten, was ich aktuell noch nicht leisten und verstehen kann. Trotzdem danke!
Ja, am besten fängst du mit kopf- und fußgesteuerten Schleifen an.

Und besorg dir eine IDE. Eclipse oder Netbeans.
 

DefconDev

Bekanntes Mitglied
Anfängern würde ich immer IntelliJ empfehlen. Das ist bezüglich Unterstützung deutlich am Besten. Für die meisten Probleme, in die man so rein rennen kann als Anfänger bietet IntelliJ dann eine "Ein Klick" Lösung.
Also mich hat Intellij früher erschlagen. Klar, Intellij ist wahrscheinlich die beste IDE. Ich benutze sie auch aber zu meinen Anfängen fand ich sie zu "umfangreich". Aber jeder wie er mag.
 

Neumi5694

Top Contributor
main sollte als erstes mal eine neue Instanz der Klasse erstellen und die Methoden dann in dieser Instanz aufrufen.

Du hast 2 Möglichkeiten, deine Arrays zu befüllen. Entweder machst du im Konstruktor (so wie oben empfohlen) das, was du gerade in den Klassenrumpf geschrieben hast (was dort, wo du's geschrieben hast, nicht geht), oder du befüllst sie direkt an der Deklaration.
Java:
private String[] namen = new String[]{"Lisa","Erik","Patrick","Manfred","Johannes","Sebastian","Makoto","Benjamin","Philipp","Tobias"};
Da musst du halt selbst drauf schauen, dass die Anzahl der Werte passt, das Array wird die entsprechende Länge kriegen.
 

Ähnliche Java Themen

Neue Themen


Oben