Java/Array: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Ugh
Keine Bearbeitungszusammenfassung
(akt)
Markierung: 2017-Quelltext-Bearbeitung
 
(24 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Babel-3|Idee|Software|Links}}
Für größere Datenmangen reicht die bisher vorgestellte Wertzuweisung an eine Variable nicht mehr aus. Hier kommen '''Arrays''' (engl. für (Daten)-Felder) ins Spiel. Sie sind wie ein "Schubladenschrank" mit nummerierten Schubladen.  
{{Kasten gelb|Dieser Artikel entspricht der Ausarbeitung auf http://informatik.zum.de/pieper/
Dort finden sich ausdruckbare Materialien und die zugehörigen Beispiele.}}


==Zur Konzeption==
 
{{Unterrichtsidee}}
{{Fortsetzung|
* Es wird anhand von elementaren Methoden zum Umgang mit dem Array der Array erklärt. Man kann sich dabei auf Mathematik beziehen: x1, x2, x3.. xn als indizierte Variable sollte den Schülern bekannt sein.
weiter=Dateihandling|weiterlink=Java/Dateihandling|
* Ein netter Vergleich für Neulinge ist ein "Schubladenschrank" mit nummerierten Schubladen.
vorher=Grafik, Threads<br>und '''GUI'''|vorherlink=Java/GUI|
* Die Beispiele sind auf den Umgang mit BlueJ hin konzipiert und enthalten daher keine main Methode.
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}
* Es können Parallelen zum Alltag hergestellt werden: Wo nutzen Schüler privat so etwas wie einen Array (z.B. Karteikasten, Buch, Kalender, Handyadressbuch...).
 
== Einführung ==
[[Datei:Quipu.png|250px|rechts|Quipu (Khipu)]]
[[Datei:Storage size comparison.jpg|250px|rechts|Verschiedene Massenspeichermedien (Streichholz als Maßstab)]]
Die Speicherung von Daten umfasst alle Speichermedien für die mechanische Bearbeitungsprozesse benötigt werden. Unterschiede bestehen hierbei in der Handhabung  sowie der Lebensdauer (Haltbarkeit) des jeweiligen Speichermediums.
* Papier, auch Papyrus, Palmblatt
* Pergament, Tierhäute und Leder
* Steintafel
* Tontafel, Tonzylinder
* Holztafel, Birkenrinde, Kerbholz
* Wachstafel
* Knotenschrift, Teppich von Bayeux, Webwaren und Stoffe
* Wandzeichnung, Schiefertafel
* Lochkarten, Lochstreifen
* LP (Langspielplatte, Vinyl), Wachszylinder
{{wpde|Datenspeicher}}
 
 
{{Box|Überlegung|# Womit würden Sie Ihre Daten speichern?
# Wie würden Sie Ihre Datenspeicherung organisieren / strukturieren?
# Nach welchen Kriterien würden Sie das Medium und die Struktur variieren?|Arbeitsmethode}}


== Datenstrukturen ==
== Datenstrukturen ==
{{Zitat wpde|In der Informatik ist eine '''Datenstruktur''' eine bestimmte Art, Daten zu verwalten und miteinander zu verknüpfen, um in geeigneter Weise auf diese zugreifen und diese manipulieren zu können. Datenstrukturen sind immer mit bestimmten Operationen verknüpft, um eben diesen Zugriff und diese Manipulation zu ermöglichen.
In der Informatik ist eine '''Datenstruktur''' eine bestimmte Art, Daten zu verwalten und miteinander zu verknüpfen, um in geeigneter Weise auf diese zugreifen und diese manipulieren zu können. Datenstrukturen sind immer mit bestimmten Operationen verknüpft, um eben diesen Zugriff und diese Manipulation zu ermöglichen.
Das '''Array''' ist die einfachste verwendete Datenstruktur. Es werden hierbei mehrere Variablen vom selben Basisdatentyp gespeichert. Ein Zugriff auf die einzelnen Elemente wird über einen Index möglich. (...)
 
=== Die Datenstruktur Array (Feld) ===
Das '''Array''' ist die einfachste verwendete Datenstruktur. Es werden hierbei mehrere Variablen vom selben [[Java/Glossar#Datentypen|Basisdatentyp]] gespeichert. Ein Zugriff auf die einzelnen Elemente wird über einen Index möglich.
 
Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet.  
Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet.  
Wegen ihrer Einfachheit und grundlegenden Bedeutung bieten die allermeisten Programmiersprachen eine konkrete Umsetzung dieser Datenstruktur als zusammengesetzten Datentyp Array im Grundsprachumfang an.
|Datenstruktur|18.05.2006}}


Sie verwenden Arrays im Mathematikunterricht, wenn Sie Variablen mit einem Index versehen: <code>x1, x2, x3, … xn</code>
Jedes x ist eindeutig durch seinen Index definiert. Sie kennen Arrays sogar schon in Java: Strings entsprechen Arrays aus <code>chars</code> (das ist der Datentyp für Zeichen).
=== Ein erster Beispiel-Array ===
Wir legen ein Feld mit Zahlen vom Typ <code>double</code> an (z.B. um die Raumtemperatur auf einer Zeitleiste zu erfassen).


== Ein erstes Beispiel ==
<source lang="java">
<java>
public class ArrayTest1
public class ArrayTest1
{
{
Zeile 34: Zeile 57:
   }
   }
    
    
   public double getZahlInFeld(int index, int wert)
   public double getZahlInFeld(int index)
   {
   {
     return zahlenFeld[index];
     return zahlenFeld[index];
   }   
   }   
}
}
</java>
</source>
 
Die Eigenschaft <code>zahlenfeld</code> wird als Array mit double-Elementen deklariert:


Die Eigenschaft zahlenfeld wird als Array mit double-Elementen deklariert:
<code>private double[] zahlenFeld;</code>
::private double[] zahlenFeld;
Das Kennzeichen hierfür sind die eckigen Klammern.
Das Kennzeichen hierfür sind die eckigen Klammern.
Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:
Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:
::zahlenFeld = new double[10];   
 
<code>zahlenFeld = new double[10];  </code>
 
Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:
Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:
::zahlenFeld[5]=27.3;
setzt beispielsweise zahlenFeld mit dem Index 5 auf den Wert 27.3
So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter index ergibt.


{{Kasten gelb|Hinweis:
<code>zahlenFeld[5]=27.3;</code>
Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.}}


Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht es, den Index 10 zu wählen.  
setzt beispielsweise <code>zahlenFeld</code> mit dem Index 5 auf den Wert 27.3


==length==
So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter <code>index</code> ergibt.
Jeder Array hat die Eigenschaft length, mit der die Länge des Feldes festgestellt werden kann.


<java>
{{Box|Hinweis|
   public double getLaenge()
Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.
 
Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht es, den Index 10 zu wählen.|Merksatz}}
 
Vergleiche dazu die Darstellung im Object-Inspector in BlueJ.
 
<div class="grid">
<div class="width-1-2">
[[Datei:Array-1.png|thumb|center|300px|Schritt 1: Inspect in ArrayTest1 wählen]]
 
[[Datei:Array-2.png|thumb|center|300px|Schritt 2: noch einmal Inspect wählen]]
</div>
<div class="width-1-2">
[[Datei:Array-3.png|thumb|300px|Schritt 3: Hier sieht man das Feld mit den Elementen zahlenFeld [0] bis zahlenFeld [9]]]
</div>
</div>
 
=== length ===
Jedes Array hat die Eigenschaft <code>length</code>, mit der die Länge des Feldes festgestellt werden kann.
 
<source lang="java">
   public int getLaenge()
   {
   {
     return zahlenFeld.length;
     return zahlenFeld.length;
   }
   }
</java>
</source>


==Ausgabe aller Werte==
{{Übung|Sprechen Sie length 10 mal nacheinander aus.}}
Die Ausgabe aller Werte eines Arrays lässt sich einfach mit Hilfe einer einfachen Schleife realisieren, die abbricht, wenn eine Zählvariable (in diesem Fall i) die Länge des Feldes erreicht hat.
Denken Sie daran, dass i zunächst auf 0 und nicht auf 1 gesetzt werden muss.


<java>
=== Ausgabe aller Werte ===
Die Ausgabe aller Werte eines Arrays lässt sich einfach mit Hilfe einer einfachen Schleife realisieren, die abbricht, wenn eine Zählvariable (in diesem Fall <code> i</code>) die Länge des Feldes erreicht hat.
 
Denken Sie daran, dass <code> i </code> zunächst auf 0 und nicht auf 1 gesetzt werden muss.
 
<source lang="java">
   public void gibAus ()
   public void gibAus ()
   {
   {
       int i=0;
       int i = 0;
       while(i<zahlenFeld.length){
       while(i < zahlenFeld.length){
         System.out.println("Index:"+i+" hat den Wert "+zahlenFeld[i]);
         System.out.println("Index:" + i + " hat den Wert " + zahlenFeld[i]);
         i++;
         i++;
       }
       }
   }
   }
</java>
</source>


==Zufallszahlenfeld==
==Zufallszahlenfeld==
<java>
<source lang="java">
   public void macheZufallsfeld (int maximum)
   public void macheZufallsfeld (int maximum)
   {
   {
       int i=0;
       int i = 0;
       while(i<zahlenFeld.length){
       while(i < zahlenFeld.length){
         zahlenFeld[i]=(int)(maximum*(Math.random()))+1;
         zahlenFeld[i] = (int)(maximum * (Math.random())) + 1;
         i++;
         i++;
       }
       }
   }
   }
</java>
</source>
Die oben abgebildete Methode weist dem Feld Zufallszahlen (ohne Nachkommastellen) zu. Das ist sehr praktisch, wenn man das Feld nicht von Hand befüllen möchte. maximum gibt obere Grenze an. Die Zufallszahlen liegen also zwischen 1 und (einschließlich) maximum.
Die oben abgebildete Methode weist dem Feld Zufallszahlen (ohne Nachkommastellen) zu. Das ist sehr praktisch, wenn man das Feld nicht von Hand befüllen möchte. <code>maximum</code> gibt obere Grenze an. Die Zufallszahlen liegen also zwischen 1 und (einschließlich) <code>maximum</code>.


{{Übung| Verändern Sie die Methode: Lassen Sie Nachkommastellen in den Zufallszahlen zu.}}


== Was ist die größte Zahl im Feld ==
== Was ist die größte Zahl im Feld ==
<java>
<source lang="java">
   public double getGroessteZahl ()
   public double getGroessteZahl ()
   {
   {
       double maximum=zahlenFeld[0];
       double maximum=zahlenFeld[0];
       int i=1;
       int i = 1;
       while(i<zahlenFeld.length){
       while(i < zahlenFeld.length){
         if (zahlenFeld[i]>maximum) {
         if (zahlenFeld[i] > maximum) {
             maximum=zahlenFeld[i];     
             maximum = zahlenFeld[i];     
         }
         }
         i++;
         i++;
Zeile 109: Zeile 156:
       return maximum;
       return maximum;
   }   
   }   
</java>
</source>


Eine typische Aufgabe im Zusammenhang mit Arrays ist, die größte Zahl zu suchen (z.B. Maximaltemperatur bei einer Temperaturzeitreihe).
Eine typische Aufgabe im Zusammenhang mit Arrays ist, die größte Zahl zu suchen (z.B. Maximaltemperatur bei einer Temperaturzeitreihe).
Dabei geht man wie folgt vor:
Dabei geht man wie folgt vor:
* Eine Hilfsvariable maximum bekommt den ersten Wert des Feldes zugewiesen.
* Eine Hilfsvariable <code>maximum</code> bekommt den ersten Wert des Feldes zugewiesen.
* Danach werden alle anderen Werte des Feldes durchlaufen und mit maximum verglichen.
* Danach werden alle anderen Werte des Feldes durchlaufen und mit <code>maximum</code> verglichen.
* Jedesmal, wenn ein größerer Wert gefunden wurde, wird maximum überschrieben.
* Jedesmal, wenn ein größerer Wert gefunden wurde, wird <code>maximum</code> überschrieben.


Die folgenden Übungen sind alle ähnlich: Sie benötigen eine Schleife, Hilfsvariablen und zumindest bei 1 und 2 eine if-Abfrage.
Die folgenden Übungen sind alle ähnlich: Sie benötigen eine Schleife, Hilfsvariablen und zumindest bei 1 und 2 eine if-Abfrage.
Zeile 121: Zeile 168:
{{Übung|# Lassen Sie in einer neuen Methode die kleinste Zahl im Feld suchen.
{{Übung|# Lassen Sie in einer neuen Methode die kleinste Zahl im Feld suchen.
# Lassen Sie in einer neuen Methode den Index und nicht den Wert des größten Elementes zurückgeben.
# Lassen Sie in einer neuen Methode den Index und nicht den Wert des größten Elementes zurückgeben.
# Lassen Sie in einer neuen Methode die Summe aller Zahlen im Feld zurückgeben. Der Benutzer soll eine Zahl übergeben. Wenn die Zahl im Feld vorkommt, soll true zurückgegeben werden, wenn nicht false.}}
# Lassen Sie in einer neuen Methode die Summe aller Zahlen im Feld zurückgeben.
# Lassen Sie in einer neuen Methode den Benutzer eine Zahl übergeben. Wenn die Zahl im Feld vorkommt, soll <code>true</code> zurückgegeben werden, wenn nicht <code>false</code>.}}
 
== Textdatei als Array ==
[[Datei:Klassendiagramm-TxtDatei.png|thumb|Klassendiagramm]] In jedem Java Buch wird erklärt, wie man mit Dateien umgeht. Hier möchte ich das nicht vertiefen, sondern setze die Klasse TxtDatei als gegeben voraus. Mit Hilfe des [[Klassendiagramm|UML-Diagramms]] gelingt es, zu verstehen, wie sie angewendet werden kann.
 
TxtDatei hat 3 Methoden.
* <code>schreibe()</code>: schreibt in eine Datei mit dem Namen„dateiname“ einen String. War es erfolgreich, gibt die Methode true zurück.<br>Beispiel: <code>t.schreibe(“testdatei“,“Hallo Welt!“);</code>
* <code>liesDateiInString()</code>: liest  die  gesamte  Textdatei  mit  dem  Namen  „dateiname“  in  einen String ein.<br>Beispiel: <code>String s = t.liesDateiInString(“testdatei“);</code>
* <code>liesDateinameInArray()</code>  erfordert neben dem Dateinamen einen zweiten Parameter, nämch  den maximalen Index  des Arrays. Zurückgeben  wird ein String-Array, bei dem jedeTextzeile ein Element des Arrays ist. Überflüssige Zeilen haben den Wert null.
 
=== Beispielprogramm Erlkönig ===
Das folgende Programm gibt den Erlkönig auf der Konsole aus. Die Textdatei „erlk.txt“ liegt dabei im Projektverzeichnis vor.
 
<source lang="java">
public class Starte { 
  public static void main( String args[] ) {
    TxtDatei datei = new TxtDatei();
    int max = 1000; 
    String[] zeilen = new String[max];
    zeilen = datei.liesDateiInArray("erlk", max); 
    for (int i=0; i < zeilen.length; i++) {       
      if (zeilen[i]!=null) {             
        System.out.println(zeilen[i]); 
      } 
    }
  }
} // Ende der Klasse</source>
 
{{Übung|# Analysieren Sie die main Methode der Klasse Start.
# Lassen Sie den Erlkönig rückwärts ausgeben – die letzte Zeile zuerst. Lassen Sie nur die geraden Zeilen ausgeben. Lassen Sie nur die Zeilen, die mit einem „W“ beginnen, ausgeben. (vgl. Aufg. 4)
# Bei jeder neuen Strophe soll „--- Ende der Strophe ---“ ausgegeben werden.
# Lassen Sie bei der Ausgabe jedes „Erl“ durch „Unken“ ersetzen. <br>Recherchieren Sie dazu im Internet unter Stringverarbeitung.Z.B. [http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_04_002.htm#mj1ce18a66f5cc0a95bbe689a9d8271a3d openbook Java Insel 9]
# Diskutieren Sie: Welche Möglichkeiten und welche Gefahren ergeben sich durch einen Zugriff auf Dateien?}}
 
{{Fortsetzung|
weiter=Dateihandling|weiterlink=Java/Dateihandling|
vorher=Grafik, Threads<br>und '''GUI'''|vorherlink=Java/GUI|
übersicht=Einstieg in Java<br>(Übersicht)|übersichtlink=Java#Übersicht|}}
 
== Weblinks ==


==siehe auch==
== Siehe auch ==
* [[Java]]
*Einführungsbeispiel zu ARRAYs in Java: Prüfung eines EAN-Codes:
{{Pdf|eanCode.pdf|Der EAN-Code}}


==Weblinks==
* http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Array.htm
* http://www.rolandgeyer.at/kurse/german/javsrc/jav017.html


[[Kategorie:Java]]
[[Kategorie:Unterrichtsidee]]
[[Kategorie:Informatik]]
[[Kategorie:Informatik]]

Aktuelle Version vom 20. August 2019, 05:51 Uhr

Für größere Datenmangen reicht die bisher vorgestellte Wertzuweisung an eine Variable nicht mehr aus. Hier kommen Arrays (engl. für (Daten)-Felder) ins Spiel. Sie sind wie ein "Schubladenschrank" mit nummerierten Schubladen.


Einführung

Quipu (Khipu)
Verschiedene Massenspeichermedien (Streichholz als Maßstab)

Die Speicherung von Daten umfasst alle Speichermedien für die mechanische Bearbeitungsprozesse benötigt werden. Unterschiede bestehen hierbei in der Handhabung sowie der Lebensdauer (Haltbarkeit) des jeweiligen Speichermediums.

  • Papier, auch Papyrus, Palmblatt
  • Pergament, Tierhäute und Leder
  • Steintafel
  • Tontafel, Tonzylinder
  • Holztafel, Birkenrinde, Kerbholz
  • Wachstafel
  • Knotenschrift, Teppich von Bayeux, Webwaren und Stoffe
  • Wandzeichnung, Schiefertafel
  • Lochkarten, Lochstreifen
  • LP (Langspielplatte, Vinyl), Wachszylinder

DatenspeicherWikipedia-logo.png


Überlegung
  1. Womit würden Sie Ihre Daten speichern?
  2. Wie würden Sie Ihre Datenspeicherung organisieren / strukturieren?
  3. Nach welchen Kriterien würden Sie das Medium und die Struktur variieren?

Datenstrukturen

In der Informatik ist eine Datenstruktur eine bestimmte Art, Daten zu verwalten und miteinander zu verknüpfen, um in geeigneter Weise auf diese zugreifen und diese manipulieren zu können. Datenstrukturen sind immer mit bestimmten Operationen verknüpft, um eben diesen Zugriff und diese Manipulation zu ermöglichen.

Die Datenstruktur Array (Feld)

Das Array ist die einfachste verwendete Datenstruktur. Es werden hierbei mehrere Variablen vom selben Basisdatentyp gespeichert. Ein Zugriff auf die einzelnen Elemente wird über einen Index möglich.

Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet.

Sie verwenden Arrays im Mathematikunterricht, wenn Sie Variablen mit einem Index versehen: x1, x2, x3, … xn Jedes x ist eindeutig durch seinen Index definiert. Sie kennen Arrays sogar schon in Java: Strings entsprechen Arrays aus chars (das ist der Datentyp für Zeichen).

Ein erster Beispiel-Array

Wir legen ein Feld mit Zahlen vom Typ double an (z.B. um die Raumtemperatur auf einer Zeitleiste zu erfassen).

public class ArrayTest1
{
  private double[] zahlenFeld;
 
  public ArrayTest1()
  {
    zahlenFeld = new double[10];   
  }
  
  public void setZahlInFeld(int index, double wert)
  {
    zahlenFeld[index]=wert;
  }
  
  public double getZahlInFeld(int index)
  {
    return zahlenFeld[index];
  }  
}

Die Eigenschaft zahlenfeld wird als Array mit double-Elementen deklariert:

private double[] zahlenFeld; Das Kennzeichen hierfür sind die eckigen Klammern.

Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:

zahlenFeld = new double[10];

Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:

zahlenFeld[5]=27.3;

setzt beispielsweise zahlenFeld mit dem Index 5 auf den Wert 27.3

So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter index ergibt.


Hinweis

Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.

Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht es, den Index 10 zu wählen.

Vergleiche dazu die Darstellung im Object-Inspector in BlueJ.

Schritt 1: Inspect in ArrayTest1 wählen
Schritt 2: noch einmal Inspect wählen
Schritt 3: Hier sieht man das Feld mit den Elementen zahlenFeld [0] bis zahlenFeld [9]

length

Jedes Array hat die Eigenschaft length, mit der die Länge des Feldes festgestellt werden kann.

  public int getLaenge()
  {
    return zahlenFeld.length;
  }


Übung
Sprechen Sie length 10 mal nacheinander aus.


Ausgabe aller Werte

Die Ausgabe aller Werte eines Arrays lässt sich einfach mit Hilfe einer einfachen Schleife realisieren, die abbricht, wenn eine Zählvariable (in diesem Fall i) die Länge des Feldes erreicht hat.

Denken Sie daran, dass i zunächst auf 0 und nicht auf 1 gesetzt werden muss.

  public void gibAus ()
  {
      int i = 0;
      while(i < zahlenFeld.length){
         System.out.println("Index:" + i + " hat den Wert " + zahlenFeld[i]);
         i++;
      }
  }

Zufallszahlenfeld

  public void macheZufallsfeld (int maximum)
  {
      int i = 0;
      while(i < zahlenFeld.length){
         zahlenFeld[i] = (int)(maximum * (Math.random())) + 1;
         i++;
      }
  }

Die oben abgebildete Methode weist dem Feld Zufallszahlen (ohne Nachkommastellen) zu. Das ist sehr praktisch, wenn man das Feld nicht von Hand befüllen möchte. maximum gibt obere Grenze an. Die Zufallszahlen liegen also zwischen 1 und (einschließlich) maximum.


Übung
Verändern Sie die Methode: Lassen Sie Nachkommastellen in den Zufallszahlen zu.


Was ist die größte Zahl im Feld

  public double getGroessteZahl ()
  {
      double maximum=zahlenFeld[0];
      int i = 1;
      while(i < zahlenFeld.length){
         if (zahlenFeld[i] > maximum) {
            maximum = zahlenFeld[i];    
         }
         i++;
      }
      return maximum;
  }

Eine typische Aufgabe im Zusammenhang mit Arrays ist, die größte Zahl zu suchen (z.B. Maximaltemperatur bei einer Temperaturzeitreihe). Dabei geht man wie folgt vor:

  • Eine Hilfsvariable maximum bekommt den ersten Wert des Feldes zugewiesen.
  • Danach werden alle anderen Werte des Feldes durchlaufen und mit maximum verglichen.
  • Jedesmal, wenn ein größerer Wert gefunden wurde, wird maximum überschrieben.

Die folgenden Übungen sind alle ähnlich: Sie benötigen eine Schleife, Hilfsvariablen und zumindest bei 1 und 2 eine if-Abfrage.


Übung
  1. Lassen Sie in einer neuen Methode die kleinste Zahl im Feld suchen.
  2. Lassen Sie in einer neuen Methode den Index und nicht den Wert des größten Elementes zurückgeben.
  3. Lassen Sie in einer neuen Methode die Summe aller Zahlen im Feld zurückgeben.
  4. Lassen Sie in einer neuen Methode den Benutzer eine Zahl übergeben. Wenn die Zahl im Feld vorkommt, soll true zurückgegeben werden, wenn nicht false.


Textdatei als Array

Klassendiagramm

In jedem Java Buch wird erklärt, wie man mit Dateien umgeht. Hier möchte ich das nicht vertiefen, sondern setze die Klasse TxtDatei als gegeben voraus. Mit Hilfe des UML-Diagramms gelingt es, zu verstehen, wie sie angewendet werden kann.

TxtDatei hat 3 Methoden.

  • schreibe(): schreibt in eine Datei mit dem Namen„dateiname“ einen String. War es erfolgreich, gibt die Methode true zurück.
    Beispiel: t.schreibe(“testdatei“,“Hallo Welt!“);
  • liesDateiInString(): liest die gesamte Textdatei mit dem Namen „dateiname“ in einen String ein.
    Beispiel: String s = t.liesDateiInString(“testdatei“);
  • liesDateinameInArray() erfordert neben dem Dateinamen einen zweiten Parameter, nämch den maximalen Index des Arrays. Zurückgeben wird ein String-Array, bei dem jedeTextzeile ein Element des Arrays ist. Überflüssige Zeilen haben den Wert null.

Beispielprogramm Erlkönig

Das folgende Programm gibt den Erlkönig auf der Konsole aus. Die Textdatei „erlk.txt“ liegt dabei im Projektverzeichnis vor.

public class Starte {   
  public static void main( String args[] ) {
    TxtDatei datei = new TxtDatei(); 
    int max = 1000;   
    String[] zeilen = new String[max];
    zeilen = datei.liesDateiInArray("erlk", max);   
    for (int i=0; i < zeilen.length; i++) {        
      if (zeilen[i]!=null) {              
        System.out.println(zeilen[i]);  
      }   
    }
  }
} // Ende der Klasse


Übung
  1. Analysieren Sie die main Methode der Klasse Start.
  2. Lassen Sie den Erlkönig rückwärts ausgeben – die letzte Zeile zuerst. Lassen Sie nur die geraden Zeilen ausgeben. Lassen Sie nur die Zeilen, die mit einem „W“ beginnen, ausgeben. (vgl. Aufg. 4)
  3. Bei jeder neuen Strophe soll „--- Ende der Strophe ---“ ausgegeben werden.
  4. Lassen Sie bei der Ausgabe jedes „Erl“ durch „Unken“ ersetzen.
    Recherchieren Sie dazu im Internet unter Stringverarbeitung.Z.B. openbook Java Insel 9
  5. Diskutieren Sie: Welche Möglichkeiten und welche Gefahren ergeben sich durch einen Zugriff auf Dateien?


Weblinks

Siehe auch

  • Einführungsbeispiel zu ARRAYs in Java: Prüfung eines EAN-Codes:

Pdf20.gif Der EAN-Code