Arrays:Javakurs: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 12: Zeile 12:
Wieviel Elemente ein Feld hat, wird bei der Definition festgelegt. Die Anzahl kann zur Laufzeit nicht geändert werden.
Wieviel Elemente ein Feld hat, wird bei der Definition festgelegt. Die Anzahl kann zur Laufzeit nicht geändert werden.
Ausweg: neues Feld definieren und umkopieren.
Ausweg: neues Feld definieren und umkopieren.
Man kann natürlich auch die Anzahl der Elemente, die ein Feld hat abfragen. Das wird mit <nowiki><feld>.length</nowiki> erledigt.


== Syntax ==
== Syntax ==
=== Definition ===
=== Definition ===
<nowiki>
<nowiki>
<datatype> <name> '[' ']' '=' 'new' <dataType> '(' <count_expr> ')' ';'
<datatype> <name> '[' ']' '=' 'new' <dataType> '[' <count_expr> ']' ';'
</nowiki>
</nowiki>


Zeile 35: Zeile 37:
Der Index-Ausdruck muss eine Ganzzahl liefern (int) und zwischen 0 und der Maximalindex (bei der Definition festgelegt), liegen.
Der Index-Ausdruck muss eine Ganzzahl liefern (int) und zwischen 0 und der Maximalindex (bei der Definition festgelegt), liegen.


=== Initalisierung mit Konstanten ===
Sind die Werte eines Arrays bekannt, können sie bei der Definition schon angegeben werden:
<pre>int[] numberBases = { 2, 8, 10, 16 };
char[] vovals = { 'a', 'e', 'i', 'o', 'u' };
</pre>
== Beispiel ==
== Beispiel ==
<pre>// Sieb des Eratosthenes: von 1..100
<pre>// Sieb des Eratosthenes: von 1..100
int count = 100;
int count = 100;
boolean sieve = new boolean[count];
        boolean[] sieve = new boolean[count];
int ix;
        int ix;
for (ix = 0; ix < count; ix++)
        for (ix = 0; ix < count; ix++)
  sieve[ix] = true;
          sieve[ix] = true;
for (divider = 1; divider*divider < count; divider += 2){
        for (int divider = 1; divider*divider < count; divider += 2){
  int div2 = divider == 1 ? 2 : divider;
          int mult = divider == 1 ? 2 : divider;
  for (ix = div2; ix < count; ix += div2)
          for (ix = mult*2; ix < count; ix += mult)
      sieve[ix] = false;
              sieve[ix] = false;
}
        }
for (ix = 0; ix < count; ix++){
        for (ix = 2; ix < count; ix++){
  if (sieve[ix])
          if (sieve[ix])
      System.out.print(String.format(" %d", ix));
              System.out.print(String.format(" %d", ix));
}
        }
System.out.println();
        System.out.println();
</pre>
</pre>


== Aufgabe ==
== Aufgabe ==
* Überprüfe für die ersten 100 Fibunacci-Zahlen folgende Aussagen
* Überprüfe für die ersten 90 Fibunacci-Zahlen folgende Aussagen
** genau jede dritte Fibonacci-Zahl ist durch 2 teilbar
** genau jede dritte Fibonacci-Zahl ist durch 2 teilbar
** genau jede fünfte Fibonacci-Zahl ist durch 5 teilbar
** genau jede fünfte Fibonacci-Zahl ist durch 5 teilbar
Hinweis: Fibunacci-Zahlen sind eine Zahlfolge mit den Anfangswerten 1 und 1 und der Formel: Fn = Fn-2 + Fn-1. Also F3 = F1 + F2, F4 = F2 + F3 ...
Beachte: die 90.te Fibunacci-Zahl ist 2.88E18, also gerade noch als long darstellbar (2**63=9E18)

Aktuelle Version vom 29. September 2014, 19:09 Uhr


Übersicht

Theorie[Bearbeiten]

Es kommt oft vor, dass eine Liste von gleichartigen Objekten benötigt wird. Dies wird als "Feld" (array) bezeichnet.

Die Elemente eines Feldes werden per Index angesprochen. Der erste gültige Index ist 0.

Wieviel Elemente ein Feld hat, wird bei der Definition festgelegt. Die Anzahl kann zur Laufzeit nicht geändert werden. Ausweg: neues Feld definieren und umkopieren.

Man kann natürlich auch die Anzahl der Elemente, die ein Feld hat abfragen. Das wird mit <feld>.length erledigt.

Syntax[Bearbeiten]

Definition[Bearbeiten]

<datatype> <name> '[' ']' '=' 'new' <dataType> '[' <count_expr> ']' ';'

Der Anzahl-Ausdruck muss eine Ganzzahl liefern (int).

Zuweisung[Bearbeiten]

<name> '[' <index_expr> ']' '=' <value_expr> ';'

Der Index-Ausdruck muss eine Ganzzahl liefern (int) und zwischen 0 und der Maximalindex (bei der Definition festgelegt), liegen.

Verwendung[Bearbeiten]

<name> '[' <index_expr> ']'

Der Index-Ausdruck muss eine Ganzzahl liefern (int) und zwischen 0 und der Maximalindex (bei der Definition festgelegt), liegen.

Initalisierung mit Konstanten[Bearbeiten]

Sind die Werte eines Arrays bekannt, können sie bei der Definition schon angegeben werden:

int[] numberBases = { 2, 8, 10, 16 };
char[] vovals = { 'a', 'e', 'i', 'o', 'u' }; 

Beispiel[Bearbeiten]

// Sieb des Eratosthenes: von 1..100
int count = 100;
        boolean[] sieve = new boolean[count];
        int ix;
        for (ix = 0; ix < count; ix++)
           sieve[ix] = true;
        for (int divider = 1; divider*divider < count; divider += 2){
           int mult = divider == 1 ? 2 : divider;
           for (ix = mult*2; ix < count; ix += mult)
              sieve[ix] = false;
        }
        for (ix = 2; ix < count; ix++){
           if (sieve[ix])
              System.out.print(String.format(" %d", ix));
        }
        System.out.println();

Aufgabe[Bearbeiten]

  • Überprüfe für die ersten 90 Fibunacci-Zahlen folgende Aussagen
    • genau jede dritte Fibonacci-Zahl ist durch 2 teilbar
    • genau jede fünfte Fibonacci-Zahl ist durch 5 teilbar

Hinweis: Fibunacci-Zahlen sind eine Zahlfolge mit den Anfangswerten 1 und 1 und der Formel: Fn = Fn-2 + Fn-1. Also F3 = F1 + F2, F4 = F2 + F3 ...

Beachte: die 90.te Fibunacci-Zahl ist 2.88E18, also gerade noch als long darstellbar (2**63=9E18)