Pascalsches Dreieck

Wang

Bekanntes Mitglied
Moin',

ich lese mir gerade das Kapitel Arrays im Buch "Java als erste Programmiersprache" durch. Ein Programmcode aus diesem Kapitel bereitet mir etwas Kopfschmerzen. Es wäre super, wenn jemand auf meine Fragen eingehen könnte:

1.) Ich habe noch immer nicht verstanden, was ein mehrdimensionales Array eigentlich ist. Ein eindimensionales Array wird auf dem Bildschirm ja in einer Zeile dargestellt, z.B.

1 1 1 1 1 1 1 1 1 1 1 1 1 1

Wie muss man sich aber ein zweidimensionales Array vorstellen, das durch den Code "int [][] binom = new int [EBENE][];" realisiert wird?
Meint das wie in der Matematik eine Matrix aus n Zeilen x m Spalten, falls ja, was ist dann bei einem dreimensionalen Array?

2.) Im unteren Code wird ja durch "int [][] binom = new int [EBENE][];" ein Array-Objekt angelegt.
Gleich nach der ersten for-Schleife steht "binom = new int [i+1];". Genau das verstehe ich nicht... Es müsste doch heißen "int [] binom = new int [i+1];" oder ist damit das zweidimensionale Array gemeint? :bahnhof:

Denke wenn ich die zwei Punkte begreife, sollte der Rest kein Problem mehr darstellen. Vielen Dank für Eure Mühe.

Gruß
Wang

Java:
// Datei: PascalDreieck.java

public class PascalDreieck
{
   public static void main (String[] args)
   {
      final int EBENE = 10;
      int i;
      int j;
      int [][] binom = new int [EBENE][];

      for (i = 0; i < binom.length; i++)
      {
         // Anlegen eines Arrays mit der Größe der entsprechenden
         // Ebene.
         binom [i] = new int [i+1];

         // Erstes Element einer Ebene mit 1 belegen.
         binom [i][0] = 1;

         // Letztes Element einer Ebene mit 1 belegen.
         binom [i][binom [i].length-1] = 1;
         System.out.printf ("%1d ", binom [i][0]);

         for (j = 1; j < binom [i].length-1; j++)
         {
            binom [i][j] = binom [i-1][j-1] + binom [i-1][j];
            System.out.printf ("%3d ", binom [i][j]);
         }

         if (i > 0)
         {
            // Für alle Ebenen ausser der ersten wird zum Schluss
            // noch eine 1 ausgegeben.
            System.out.printf ("%3d", binom [i][binom [i].length-1]);
         }

         // Ausgabe eines Zeilenumbruchs nach jeder Ebene.
         System.out.println();
      }
   }
}
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
1.) ja genau so ist es.
1111
2222
3333

wäre z.B. eins (2D) :)

2.) weil in Java mehrdimensionale Arrays einfach Arrays von Arrays sind.
Sprich in dem 2-D Array oben wäre arr[0] = {1,1,1,1} arr[1] = {2,2,2,2} usw.... daher kannst du auch sagen arr[2] = new int[4] (also lege in arr[2] ein Array der Größe 4 an)
 
M

Marcinek

Gast
Hallo,

ein drei Dimensinales Array ist, wenn du mehrere Ebenen hintereinander nimmst.

So wie in einem 3-D Koordinaten System: x y z

Oder ein Rubikwürfel.

Ein Pascalisches Dreieck ist ein Dreieck.

*
* *
* * *

...


Und das macht der Code in der ersten Ebene hat es ein Käschen dan 2 3 ....


Gruß,

Marcinek
 

Wang

Bekanntes Mitglied
1.) ja genau so ist es.
1111
2222
3333

wäre z.B. eins (2D) :)

Danke für die schnelle Antwort. Ich denke langsam beginne ich zu begreifen. :)
Was mich noch verwirrt (wahrscheinlich denke ich zu mathematisch), wäre z.B. das hier (ein dreidimensionales Array):

"int [][][] binom = new int [EBENE][][];"

Bei einem zweidiensionalen meint doch das erste [] die Zeilen und das zweite [] die Spalten. Was meint dann hier aber das dritte []?

2.) weil in Java mehrdimensionale Arrays einfach Arrays von Arrays sind.
Sprich in dem 2-D Array oben wäre arr[0] = {1,1,1,1} arr[1] = {2,2,2,2} usw.... daher kannst du auch sagen arr[2] = new int[4] (also lege in arr[2] ein Array der Größe 4 an)

Okay. Meint dann aber das "binom = new int [i + 1];" unter der ersten for-Schleife das erste Array aus "int [] [] binom = new int [EBENE] [];" oder warum heißt es nicht "binom [] = new int [i + 1];"?


Ich hoffe jeder weiß, was ich meine... Es ist etwas schwer, das Problem in Worten zu fassen.
 
S

SlaterB

Gast
> Bei einem zweidiensionalen meint doch das erste [] die Zeilen und das zweite [] die Spalten. Was meint dann hier aber das dritte []?

Dimensionen kann man nicht immer visualisieren, in 2D gibts keine dritte, im Raum wäre die dritte Dimension die Höhe, in Raum und Zeit die 4. Dimension die Zeit

eine andere Aufreihung:
0. Dimension: ein Buchstabe
1: ein Wort = ein Array von Buchstaben
2: eine Zeile = ein Array von Worten bzw. ein 2D-Array von Buchstaben
3: eine Seite = ein Array von Zeilen bzw. ein 3D-Array von Buchstaben
4: ein Buch
eine Regalleiste
ein Regal,
ein Reihe von Regalen
ein Raum
ein Stockwerk
eine Bibliothek
eine Stadt
ein Bundesland
...
eine Erde
ein Sonnensystem
eine Galaxis
42. Dimension: ein Universum = ein Array von Galaxien bzw. ein 42D-Array von Buchstaben wie jeder weiß ;)
 
Zuletzt bearbeitet von einem Moderator:

Wang

Bekanntes Mitglied
Danke soweit.

Es hapert bei mir noch immer am Verständnis der Formulierung
Code:
binom [i] = new int [i + 1];
.
"binom" ist ja ein zweidimensionales Array. Die obige Formulierung meint, dass an der Stelle i des Arrays ein neues Array angelegt werden soll (?).

"binom" ist zweidimensional und ich verstehe jetzt nicht, ob "binom " das linke oder rechte Klammernpaar von "int [] [] binom" meint.

Ich hoffe, jemand versteht wo mein Problem ist und hat eine Erklärung dafür...

Thanks!
 
Zuletzt bearbeitet:

Illuvatar

Top Contributor
"binom" ist ja ein zweidimensionales Array.
In Java gibt es keine zweidimensionales Arrays. binom ist ein eindimensionales Array, und die Elemente davon sind wieder eindimensionale Arrays.
Ich denke, wenn du das verinnerlichst, müsste es deine Fragen beantworten ;)

Edit: Und um die Frage explizit zu beantworten: das rechte Klammerpaar
 
S

SlaterB

Gast
binom ist in erster Linie kein zweidimensionales Array sondern ein eindimensionales Array von was auch immer, das sei mal egal
binom = .. weist der i-ten Stelle einen Wert zu, die normalste Sache der Welt

zufällig ist binom ein Array von anderen Arrays, dann eben
binom = ein passendes Array

wenn man dann die Java-Syntax einbezieht und auf konkrete int[] geht, kommt das raus was du siehst,
das i ist die linke Klammer

edit:
> Edit: Und um die Frage explizit zu beantworten: das rechte Klammerpaar

ich wollt schon schreiben 'natürlich die linke, was sonst?', aber das zeigt ja, dass man beides denken kann ;)
 

Illuvatar

Top Contributor
ich wollt schon schreiben 'natürlich die linke, was sonst?', aber das zeigt ja, dass man beides denken kann ;)

Ja stimmt ;) Dass ich die rechte geschrieben hab, kam von der Vorstellung bei der Initialisierung:
Code:
int[][] = (int[])[]
- dort ist die rechte Klammer die äußere. Beim Zugriff über
Code:
binom[i][j]
ist es aber andersrum.
 
S

SlaterB

Gast
man schreibt aber auch bei der Initialisierung
> int [][] binom = new int [EBENE][];

anderes ist wohl wirklich nur abstrakte Vorstellung?
 

Wang

Bekanntes Mitglied
Danke.
Vorsichtshalber nochmal grafisch nachgefragt, ob ich's wirklich kapiert habe:

Das rot markierte i in "binom = new int [i+1];"

meint die rot markierte Stelle hier

"int [][] binom = new int [EBENE][];" ?
 

Wang

Bekanntes Mitglied
Vielen Dank.
Ich habe zusätzlich mit dem Compiler etwas "gespielt" und jetzt endlich gerafft, wie diese Arrays umgesetzt werden.
Find's vom Lehrbuch schon etwas schwach, dass da nicht näher auf die Details eingegangen wird und andere, quasi selbsterklärende Sachen, bis zum Erbrechen erklärt und wiederholt werden...

Vielen Dank nochmal an alle, für die starke Unterstützung. :toll:
 

Wang

Bekanntes Mitglied
Jetzt habe ich doch noch eine Frage zu dem Code:

Java:
// Datei: PascalDreieck.java
 
public class PascalDreieck
{
   public static void main (String[] args)
   {
      final int EBENE = 10;
      int i;
      int j;
      int [][] binom = new int [EBENE][];
 
      for (i = 0; i < binom.length; i++)
      {
         // Anlegen eines Arrays mit der Größe der entsprechenden
         // Ebene.
         binom [i] = new int [i+1];
 
         // Erstes Element einer Ebene mit 1 belegen.
         binom [i][0] = 1;
 
         // Letztes Element einer Ebene mit 1 belegen.
         binom [i][binom [i].length-1] = 1;
         System.out.printf ("%1d ", binom [i][0]);
 
         for (j = 1; j < binom [i].length-1; j++)
         {
            binom [i][j] = binom [i-1][j-1] + binom [i-1][j];
            System.out.printf ("%3d ", binom [i][j]);
         }
 
         if (i > 0)
         {
            // Für alle Ebenen ausser der ersten wird zum Schluss
            // noch eine 1 ausgegeben.
            System.out.printf ("%3d", binom [i][binom [i].length-1]);
         }
 
         // Ausgabe eines Zeilenumbruchs nach jeder Ebene.
         System.out.println();
      }
   }
}

Wozu dient der Code ab Zeile 33, schließlich wird doch bereits mit dem Code in Zeile 21 als letztes Element einer Ebene eine 1 ausgegeben...?

EDIT:
Hat sich erledigt, nachdem ich einen genaueren Blick in die Ausgabemethoden geworfen habe...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Zeile 21 ist ein Kommentar, gibt gar nix aus, Zeile 22 vielleicht, dort wird aber nur ein Wert zugewiesen, nicht ausgegeben, wäre auch die falsche Stelle (vor anderen Ausgaben)

kommentiere doch einfach Zeile 33 aus und schaue dir an was sich ändert

man kann aber schon sagen, dass das ziemlich kompliziert gemacht ist statt einfach nur
System.out.print("1");
 

Wang

Bekanntes Mitglied
Noch eine Frage zur Methode
Code:
printf()
.

Im Buch wurde das nur kurz angesprochen und nicht wirklich verständlich erklärt.

Bei der Methode
Code:
System.out.printf ("%3d ", binom [i][j]);
wurde ein Leerzeichen gelassen und bei der hier nicht
Code:
System.out.printf ("%3d", binom [i][binom [i].length-1]);
.

printf() habe ich soweit verstanden, dass sie der Formatierung der Ausgabe dient. Die gewünschte Formatierung wird immer mit dem Prozentoperator innerhalb von Anführungsstrichen angegeben.

Ist es richtig, dass mit dem 3d drei Stellen für die Ausgabe einer dezimalen Zahl reserviert werden und diese Zahl wird automatisch rechtsbündig ausgegeben?

Warum wird bei dem ersten 3d ein Leerzeichen gelassen?


Thanks!
 

Illuvatar

Top Contributor
Weil in dem String hinter dem 3d ein Leerzeichen ist ;)
Code:
System.out.printf ("%3d ", binom [i][j]);
                       ^
                       |
                   das hier
 

Wang

Bekanntes Mitglied
Genau darauf bezog sich meine Frage. ;)

Es wäre sehr nett, wenn jemand die Arbeitsweise der Methode printf() erklären könnte (also so etwas wie "%3d").

Thanks.
 

Illuvatar

Top Contributor
Achso, dann hab ich die Frage gerade falschrum verstanden ;)
Das Leerzeichen da bedeutet, dass in der Ausgabe hinter der Zahl noch ein Leerzeichen kommt. Du kannst es ja mal weglassen und ausprobieren, was passiert.

Was so etwas wie %3d bedeutet, kann man hier ganz genau nachlesen. In diesem Fall ist d die "conversion" und 3 die "width". Das bedeutet: Nimm das übergebene Argument, interpretiere es als ganze Zahl im Dezimalsystem und verwende mindestens 3 Stellen zur Ausgabe (wenn dann zum Beispiel 1 übergeben wird, wird
Code:
__1
daraus gemacht).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_so_far_away_ pascalsches Dreieck Zentrierung. Java Basics - Anfänger-Themen 12
F Pascalsches Dreieck mit Rückgabewert Java Basics - Anfänger-Themen 2
L Pascalsches Dreieck Java Basics - Anfänger-Themen 4
C Pascalsches Dreieck: Ausgabeproblem Java Basics - Anfänger-Themen 10
K pascalsches Dreieck Java Basics - Anfänger-Themen 8
M Pascalsches Dreieck Java Basics - Anfänger-Themen 12
D Pascalsches Dreieck Java Basics - Anfänger-Themen 9
G Pascalsches Dreieck Java Basics - Anfänger-Themen 8
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
G Magisches Dreieck Java Basics - Anfänger-Themen 2
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
L Dreieck Java Basics - Anfänger-Themen 22
O Erste Schritte Pascalsche Dreieck Java Basics - Anfänger-Themen 3
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
D Pascal'sches Dreieck Java Basics - Anfänger-Themen 6
N Methoden Gleichseitiges Dreieck erstellen Java Basics - Anfänger-Themen 8
U Dreieck Java Basics - Anfänger-Themen 22
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
L Dreieck Kreis Java Basics - Anfänger-Themen 12
B Dreieck Flächenberechnung Java Basics - Anfänger-Themen 2
B Java Grafikprogrammierung Dreieck Java Basics - Anfänger-Themen 6
I Umgedrehtes Dreieck Java Basics - Anfänger-Themen 3
M Dreieck erstellen Java Basics - Anfänger-Themen 17
J Dreieck Ausgeben Java Basics - Anfänger-Themen 3
R Pascalsche Dreieck Java Basics - Anfänger-Themen 4
R Pascalsche Dreieck Java Basics - Anfänger-Themen 8
H Compiler-Fehler Pascalsche Dreieck Java Basics - Anfänger-Themen 2
M Dreieck prüfen Java Basics - Anfänger-Themen 8
E Pascalsche Dreieck aus Java openbook Java Basics - Anfänger-Themen 3
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
H Dreieck aus Zeichen Java Basics - Anfänger-Themen 4
L Paskalsche Dreieck im Array Java Basics - Anfänger-Themen 2
T Pascalsche Dreieck ERKLÄRUNG Java Basics - Anfänger-Themen 6
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
Antoras Dreieck zeichnen Java Basics - Anfänger-Themen 2
A Problem Gleichseitiges Dreieck aus Sternchen Java Basics - Anfänger-Themen 7
G Pascalsche Dreieck in Dreieckform Java Basics - Anfänger-Themen 2
X Pascalsche Dreieck Java Basics - Anfänger-Themen 6
G Dreieck mit Java Apllet Java Basics - Anfänger-Themen 10
V Dreieck spiegeln Java Basics - Anfänger-Themen 3
L Dreieck soll Farbe ändern Java Basics - Anfänger-Themen 4
L Dreieck füllen Java Basics - Anfänger-Themen 4
X Dreieck ausgeben Java Basics - Anfänger-Themen 3
B Hindergrundfarbe in JPanel und Dreieck zeichnen Java Basics - Anfänger-Themen 4
D Das Problem mit dem Dreieck. Java Basics - Anfänger-Themen 5
B auf der Spitze stehendes Dreieck mit for-Schleifen Java Basics - Anfänger-Themen 6
lan2711 Anfänger: Konstruktion Dreieck Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben