faecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:start [26.10.2023 05:27] – [Das Spielfeld als zweidimensionales Array] Frank Schiebelfaecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:start [01.10.2024 06:01] (aktuell) – [Aufgaben] Svenja Müller
Zeile 1: Zeile 1:
 ====== Mehrdimensionale Arrays: Schiffe versenken ====== ====== Mehrdimensionale Arrays: Schiffe versenken ======
- +((Dieses Beispiel ist eng an die Vorlage aus dem ZUM Wiki unter https://unterrichten.zum.de/wiki/Java/Schiffeversenken angelehnt)) 
-Ein nettes Beispiel für ein zweidimensionales Array ist das Spiel Schiffe versenken. Um das Spielfeld zu modellieren, kann man ein mehrdimensionales Array einsetzen. Dabei werden die Elemente, ähnlich wie beim Koordinatensystem in Mathe die x- und y-Koordinate, durch zwei Indizes angesprochen.+Ein Beispiel für den Einsatz eines zweidimensionales Arrays ist das Spiel Schiffe versenken. Um das Spielfeld zu modellieren, kann man ein mehrdimensionales Array einsetzen. Dabei werden die Elemente, ähnlich wie beim Koordinatensystem in Mathe die x- und y-Koordinate, durch zwei Indizes angesprochen.
  
 ===== Das Spielfeld als zweidimensionales Array ===== ===== Das Spielfeld als zweidimensionales Array =====
Zeile 14: Zeile 14:
  
  
-{{ :faecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:300px-schiffeversenken-1.png |}}+{{ :faecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:sv.png?350 |}}
  
-Die Klasse Gebiet ist folgendermaßen angelegt:+Die Klassen Gebiet und Spielfeld sind dabei folgendermaßen angelegt:
  
-{{ :faecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:schiffeversenken-2.png |}}+{{ :faecher:informatik:oberstufe:java:algorithmen:arrays:mehrdimensional:klassen_sv.png |}}
  
-Das **Spielfeld** hat im Wesentlichen die Aufgabe, die Gebiete zu verwalten. Daher bekommt es nur eine Eigenschaft: ''feld'' ist ein zweidimensionales Array vom Typ ''Gebiet''. Auch hier wird das "zweidimensional" wird durch zwei leere eckige Klammerpaare realisisert: ''Gebiet[][]''.+Das **Spielfeld** hat im Wesentlichen die Aufgabe, die Gebiete zu verwalten. Daher bekommt es nur eine Eigenschaft: ''feld'' ist ein zweidimensionales Array vom Typ ''Gebiet''. Auch hier wird das "zweidimensional" durch zwei leere eckige Klammerpaare realisiert: ''Gebiet[][]''.
  
 <code java> <code java>
Zeile 44: Zeile 44:
 </code> </code>
  
-Das Anlegen eines zweidimensionalen Arrays geschieht ähnlich wie das eines eindimensionalen. Hier legt man die Größe des Arrays fest: 10x10-Felder beim Schiffeversenken. Diese Konstruktion sorgt dafür, dass die Felder nicht den Anfangswert null habenDazu müssen mit Hilfe einer verschachtelten Schleife alle Felder abgegangen werden: Erst Feld 0,0 dann 0,1 dann 0,2 .... 0,9 dann 1,0 dann 1,1 dann 1,2...dann 1,9 dann 2,0 usw. bis 9,9)+ 
 +<callout title="Hinweise zum Beispielcode für das Spielfeld"> 
 + 
 +Das Anlegen eines zweidimensionalen Arrays geschieht ähnlich wie das eines eindimensionalen. mit der Anweisung ''new Gebiet[10][10]'' legt man die Größe des Arrays fest: 10x10-Felder beim Schiffeversenken. Wie bei eindimensionalen Arrays gehen die Indizes jeweils von 0 bis 9. 
 + 
 +Um das Array sinnvoll zu initialisieren müssen mit Hilfe einer verschachtelten Schleife alle Felder abgegangen werden: Erst Feld 0,0 dann 0,1 dann 0,2 .... 0,9 dann 1,0 dann 1,1 dann 1,2...dann 1,9 dann 2,0 usw. bis 9,9)
  
 Dann wird wird beispielhaft ein 3er Schiff gesetzt. Dazu müssen 3 Felder einzeln angesprochen werden. Dann wird wird beispielhaft ein 3er Schiff gesetzt. Dazu müssen 3 Felder einzeln angesprochen werden.
  
 +</callout>
  
-Übung+===== Aufgaben =====
  
-    Analysieren Sie auf Grundlage der beiden UML-Klassendiagramme und auf Grundlageder Kenntnisse über das Schiffeversenken-Spiel die Klassen Gebiet und Spielfeld. Schätzen Sie ein, was die einzelnen Methoden bewirken, ohne dass Sie den folgenden Quelltext anschauen. Vergleichen Sie anschließend mit dem Quelltext. 
-    Nennen Sie weitere Beispiele aus dem Alltag, bei denen man Zwei- oder Mehrdimensionale Arrays benutzen könnte. 
-    Analysieren Sie die Methode schieße(int x, int y) und gibSpielfeldAufKonsoleAus() 
-    Wiederholung: Warum kann Spielfeld nicht direkt die Eigenschaften von Gebietverwenden? 
-    Entwerfen Sie die Methoden setzeSenkrechtesSchiff() und setzeWaagerechtesSchiff(), die ein Schiff auf das Spielfeld eintragen. Überlegen Sie sich zunächst, welche Übergabeparameter benötigt werden. Entwerfen Sie einen Plan, wie man vermeiden kann, dass der Spielfeldrand überschritten wird. 
-    Schreiben Sie eine Methode prüfeObGewonnen(), die dann true zurückgibt, wenn auf dem gesamten Spielfeld kein Schiff mehr steht. 
  
 +  * Analysiere auf Grundlage der beiden UML-Klassendiagramme und auf Grundlage deiner Kenntnisse über das Schiffeversenken-Spiel die Klassen ''Gebiet'' und ''Spielfeld''. Überlege dir, was die einzelnen Methoden bewirken (sollen), ohne dass Sie den folgenden Quelltext anschauen. Vergleiche anschließend mit dem Quelltext.
 +  * Nenne weitere Beispiele aus dem Alltag, bei denen man Zwei- oder Mehrdimensionale Arrays benutzen könnte.
 +  * Analysiere die Methoden ''schieße(int x, int y)'' und ''gibSpielfeldAufKonsoleAus()''
 +  * Warum kann Spielfeld nicht direkt die Eigenschaften von Gebiet verwenden?
 +  * Implementiere die Methoden ''setzeSenkrechtesSchiff()'' und ''setzeWaagerechtesSchiff()'', die ein Schiff auf das Spielfeld eintragen. Überlege zunächst, welche Übergabeparameter benötigt werden. Entwerfe einen Plan, wie man vermeiden kann, dass der Spielfeldrand überschritten wird.
 +  * Schreibe Methode ''pruefeObGewonnen()'', die dann ''true'' zurückgibt, wenn auf dem gesamten Spielfeld kein Schiff mehr steht.
  
-Quelltexte 
  
 +===== Quelltexte =====
 +
 +<code java>
 public class Gebiet public class Gebiet
 { {
Zeile 100: Zeile 108:
            
 } // Ende der Klasse } // Ende der Klasse
 +</code>
  
 +<code java>
 public class Spielfeld public class Spielfeld
 { {
Zeile 110: Zeile 120:
  {  {
     feld = new Gebiet[10][10];     feld = new Gebiet[10][10];
-    // Anfangswerte setzen f�r alle 100 Felder+    // Anfangswerte setzen fuer alle 100 Felder
     for (int i=0;i<10;i++){ // senkrecht     for (int i=0;i<10;i++){ // senkrecht
       for (int j=0;j<10;j++){ //waagerecht       for (int j=0;j<10;j++){ //waagerecht
Zeile 143: Zeile 153:
   
 } // Ende der Klasse } // Ende der Klasse
 +</code>
  
  
  
  • faecher/informatik/oberstufe/java/algorithmen/arrays/mehrdimensional/start.1698298047.txt.gz
  • Zuletzt geändert: 26.10.2023 05:27
  • von Frank Schiebel