Multistafel

Status
Nicht offen für weitere Antworten.

needyourhelp

Mitglied
Mahlzeit,

helft mir mal auf die Sprünge bei folgendem Problem mit einem Lehrbsp. zu Schleifen:

Code:
/* Listing0606.java */
002 
003 import java.io.*;
004 
005 public class Listing0606
006 {
007   public static void main(String[] args)
008   {
009     int[][] data = new int[10][10];
010 
011     //Multiplikationstafel erstellen
012     for (int i = 1; i <= 10; ++i) {
013       for (int j = 1; j <= 10; ++j) {
014         data[i - 1][j - 1] = i * j;
015       }
016     }
017 
018     //Produkt größer 43 suchen 
019   loop1:
020     for (int i = 1; i <= 10; ++i) {
021       for (int j = 1; j <= 10; ++j) {
022         if (data[i - 1][j - 1] > 43) {
023           System.out.println(i + "*" + j + "=" + (i*j));
024           break loop1;
025         }
026       } 
027     } 
028   }
029 }


Ich versteh nun nicht diese data-Methode(ist das eine Methode oder Anweisung?). Wie arbeitet die? Wird hier eine geschachtelte for-Schleife benutzt, um den einzelnen Indizes Werte zuzuordnen? Wenn ja, ist der Compiler so programmiert, dass automatisch erkannt wird, dass mit i und j diese eckigen Klammer(Fachwort?) gemeint sind? Wenn ja, woran genau erkennt er dass? Weil ich unmittelbar vorher ein Array zweiter Dim. ertellt habe? Wenn ja, welches Buch muss ich kaufen um mir wegen sowas grundlegendes nicht die Haare auszureißen? Eine solche Erklärung ist in meinem Buch nicht enthalten und muss ich mir erst mühsam zusammen reimen.
data speichert, wenn ich nicht ganz falsch, also liege die Produkte aller Indexwerte unter der genauen Indexangabe ab als Tabelle. Wo bitte finde ich eine Erklärung zu data? ich kann wahrscheinlich noch nicht richtig mit diesem html-java-classen-Doku umgehen.

Die Produktsuche ist einigermaßen für mich verständlich. Aber auch hier ists ohne Wissen wie Zauber, dass der Compiler erkennt, dass i und j Indexkennzahlen sind. Ja, jetzt leuchtets mir auch ein, ist wirklich eine feine Sache, dieser Intelligente automatismus, irgendwie auch schlüssig.

Könnt ja trotzdem bitte die Buch- und Erkennungsfrage beantworten, danke.

Man, dass ist irgendwie schön. Lernt man so zu denken oder muss man dazu geboren werden? Wie kommt man nur auf sowas, ja Schönes. Die Multistafel ist doch clever ohne Ende. Wie lang braucht man in etwa, um Java zu einer zweiten Muttersprache zu machen?

mfg

edit deathbyaclown: Code tags !
 

thE_29

Top Contributor
also data ist ein 2dimensionales array, mehr kann man eigentlich nicht sagen ;)

es ist auch keine anweisung, es ist einfach eine Variable, wobei in der 1ten For schleife was hineingeschrieben wird und in der 2ten ein Eintrag größer 43 gesucht wird

ein 2dim array ist einfach eine tabelle!

hast du vorher schon etwas programmiert oder nicht?

und du kannst die vars in der eckigen Klammern benennen wie du willst
Code:
data[0][x] = 20; //wobei x = einfach eine Zahl die nicht größer sein darf als das array
 
G

Guest

Gast
Ich hab vorher nichts mit einem Comp gemacht außer Daddeln und der Standartkram(klick hier klick da). Und ich mach auch jetzt noch nichts anderes, logisch. (aber darauf wollte ich nicht hinaus)

Dass ich vorher keine Programmiersprache auf meinem oder anderen Rechner gesehen habe, siehste du daran, dass ich erst Dank deines Hinweises erkenne, dass data der Arrayname ist. Wie konnte ich das nur übersehen? Bescheuert, so wird das nichts.

Aber Dank dir, hab ichs. Den einzelnen Indizes werden die Produkte zugewiesen. Man muss halt ganz logisch denken können, Zeichen für Zeichen. Liest sich blöd, aber ich lerne sehr viel an solchen Bsp. Nochmal Danke.


Frage: Beispiel[3][5][9] - Hat jetzt jedes der ersten drei (wie nennt man eine einzelne [] in der Fachsprache, ich mein nicht einen beliebigen char, var oder String) 5 Unterverzeichnisse von denen jedes weitere 9 besitzt oder kann ich bspw. für das 2. Verzeichnis erster Ordnung die 5 auf 2 einschränken und für diese 2 Verz. zweiter Ordnung die Verzeichnisse dritter Ordnung von 9 auf bspw. 4 bzw. 7?


mfg
PS: Schön ist die für die Multistafel vieleicht ein wenig übertrieben, aber clever ist sie für mich auf jeden Fall. Darauf muss man erstmal kommen. Zeil muss es doch sein, selbst einen effizienten Code zu schreiben ohne auf bekannte Bsp. zurück greifen zu müssen. Das ist wohl die wahre Kunst. Ich habs mit Bildhauerei verglichen - denn man gibt einer Idee eine konkrete Gestalt, wenn auch in zweidimensionaler Form. (Ist Form ein an Körper gebundener Begriff?)
Auf jedenfall hats was mit echter kreativer Kunst zu tun, soviel steht für mich fest.
 
R

Roar

Gast
ein 2 dimensionales array ist nich wie eine bildhauerfigur, nur eine liste.
so z.B.

Code:
String freunde = {{"Doanld Duck", "Erpelweg 63"},{"Bruce Willis", "Oberammergau"}};
 
B

Beni

Gast
Anonymous hat gesagt.:
Frage: Beispiel[3][5][9] - Hat jetzt jedes der ersten drei (wie nennt man eine einzelne [] in der Fachsprache, ich mein nicht einen beliebigen char, var oder String) 5 Unterverzeichnisse von denen jedes weitere 9 besitzt oder kann ich bspw. für das 2. Verzeichnis erster Ordnung die 5 auf 2 einschränken und für diese 2 Verz. zweiter Ordnung die Verzeichnisse dritter Ordnung von 9 auf bspw. 4 bzw. 7?

Beispiel[3][5][9] ist ein "Array mit Länge 3 des Types[ Array mit Länge 5 des Types [ Array mit Länge 9 des Types [ Beispiel ]]]]" :bae: (Manche nenne es einen 3-dimensionalen Array des Types Beispiel mit festen Dimensionen 3, 5, 9, aber die erste Variante ist eigentlich die richtige)
(Eine weitere Gattung Forumsleser wird von mir gerne verwirrt :wink: )

Also, mit Quellcode ist es einfacher:
Code:
Beispiel[][][] beispiel = new Beispiel[3][5][9];  // ist ein 3-dimensionaler Array. 
//Würde man ihn im Raum "zeichnen", würde er ein Quader darstellen (mit Seitenlängen 3, 5, 9).

Aber es ist möglich einzelne Teile auszutauschen:
Code:
beispiel[1][2] = new Beispiel[ 20 ]; // Jetzt bekommt der Quader einen "Zacken", der aus ihm heraussticht.

Oder auch so:
Code:
beispiel[0] = new Beispiel[7][13]; // jetzt ist eine "Wand" des Quaders vergrössert worden.

:arrow: "für das 2. Verzeichnis erster Ordnung die 5 auf 2 einschränken und für diese 2 Verz. zweiter Ordnung die Verzeichnisse dritter Ordnung von 9 auf bspw. 4 bzw. 7?"

Das funktioniert.
 

needyourhelp

Mitglied
@Roar: Natürlich nicht, aber die Arbeit eines Programmierers ist vergleichbar mit der eines Bildhauers. Denk nochmal darüber nach :wink: und THX.

@Beni: So so, ein Hobby-Anthropologe. Zu welcher Gattung gehör ich denn nach deiner Theorie :) ??

Das mit den Typen gefällt mir sehr gut, danke.

Zu meiner Frage:

Code:
{int[][][] Beispiel = new Beispiel[3][5][9];
Beispiel[1] = new Beispiel[2];
Beispiel[1][0] = new Beispiel[4];
Beispiel[1][1] = new Beispiel[7];}
??

mfg
 
B

Beni

Gast
So so, ein Hobby-Antropologe. Zu welcher Gattung gehör ich denn nach deiner Theorie :)
Zu den "gemeinen Schlagfertigen".


Code:
int[][][] Beispiel = new Beispiel[3][5][9];

// Das funktioniert nicht: 
// int[][][] ist der Typ
// das linke "Beispiel" ist der Name der Variable
// das rechte "Beispiel[][][]" ist ein Typ (mit "new" wird von ihm eine neue Instanz angelegt)

// du musst also entweder:
int[][][] beispiel = new int[3][5][9];
// oder
Beispiel[][][] beispiel = new Beispiel[3][5][9];
// schreiben

Code:
beispiel[1] = new Beispiel[2];
// geht nicht: 
// beispiel ist ja: "Array von Typ[ Array von Typ[ Array von Typ[ Beispiel ]]]".
// Jetzt betrachtest du die 2. Schale von aussen, sinngemäss hast du geschrieben
"Array von Typ[ Array von Typ[ Beispiel ]]" = new "Array von Typ[ Beispiel ]"

// Du siehst, es fehlt eine "Schale"

// Falls du dich nicht auf eine Grösse für die innerste Schale festlegen möchtest, kannst du schreiben:
beispiel[1] = new Beispiel[2][];

// Was sinngemäss bedeutet:
"Bei Index 1: Array von Typ[ Array von Typ[ Beispiel ]]" = 
new "Array mit von Typ[ nicht initialisierter (=null) Array von Typ[ Beispiel] ]"

// oder z.B.
beispiel[1] = new Beispiel[2][17];
Code:
beispiel[1][0] = new Beispiel[4];
beispiel[1][1] = new Beispiel[7]; 

// die beiden sollten gehen (sofern du irgendwo eine Klasse "Beispiel" hast).
 

needyourhelp

Mitglied
Jetzt sollte es stimmen:

Code:
{int[][][] Beispiel = new int[3][5][9];
Beispiel[1] = new int[2][4];
Beispiel[1][1] = new int [7];}
? ? ?


mfg
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben