Im Kontrast zu vielen anderen Programmiersprachen ist J eine Array-Orientierte Programmiersprache. Das heisst, ein Array ist ein grundlegender Datentyp, so wie z.B. in C "int" oder "float". Ein Array in J kann verschie-denste Datentypen (Integer, Floating, String, etc.), oder wieder Arrays beinhalten. Eine "Schachtelung" Array-in-Array ist nur durch den zur Verfügung stehenden Speicher begrenzt.
Die folgenden Beispiele (in J und C) vermitteln einen kurzen Überblick über die Leistungsfähigkeit von J im Bereich "Arrays":
Beispiel 1: Erstellen eines Arrays 10x10 mit den Zahlen von 1 - 100
J
arr =. 10 10 $ 1 + i. 100
C
int i = 0; int j = 0; int k = 0; int arr[10][10]; for(i=0;i<10;i++) { for(j=0;j<10;j++) { arr[i][j] = k; k += 1; } } // Optional (Ausgabe von arr nach stdout) for(i=0;i<10;i++) { printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n", arr[i][0],arr[i][1],arr[i][2],arr[i][3], arr[i][4],arr[i][5],arr[i][6],arr[i][7], arr[i][8],arr[i][9]); }
________________________________________________________________
Beispiel 2: Ermitteln aller geraden, ungeraden und Primzahlen
J
Es werden einige Funktionen definiert, die dann auf das ganze Array "arr" angewendet werden.
gz =: 3 : '1~:2|y' uz =: 3 : '0~:2|y' pz =: 3 : '1 p: y' NB. Ermittelt die geraden Zahlen NB. Ermittelt die ungeraden Zahlen NB. Ermittelt die Primzahlen
Diese Funktionen werden auf das Array "arr" angewendet:
C
int gz(int n) { if((n%2)==0) { return 1; } else { return 0; } } int uz(int n) { if((n%2)!=0) { return 1; } else { return 0; } } // Primitiv aber kurz int pz(int n) { int i = 0; if(n<2) return 0; if(n==4) return 0; for(i=2;i<(n/2);i++) { if((n%i)==0) { return 0; } } return 1; } // Der Einfachheit halber nur die Ausgabe, ohne Modifikation for(i=0;i<10;i++) { printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d ", gz(arr[i][0])?arr[i][0]:0, gz(arr[i][1])?arr[i][1]:0, gz(arr[i][2])?arr[i][2]:0, gz(arr[i][3])?arr[i][3]:0, gz(arr[i][4])?arr[i][4]:0, gz(arr[i][5])?arr[i][5]:0, gz(arr[i][6])?arr[i][6]:0, gz(arr[i][7])?arr[i][7]:0, gz(arr[i][8])?arr[i][8]:0, gz(arr[i][9])?arr[i][9]:0); } for(i=0;i<10;i++) { printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d ", uz(arr[i][0])?arr[i][0]:0, uz(arr[i][1])?arr[i][1]:0, uz(arr[i][2])?arr[i][2]:0, uz(arr[i][3])?arr[i][3]:0, uz(arr[i][4])?arr[i][4]:0, uz(arr[i][5])?arr[i][5]:0, uz(arr[i][6])?arr[i][6]:0, uz(arr[i][7])?arr[i][7]:0, uz(arr[i][8])?arr[i][8]:0, uz(arr[i][9])?arr[i][9]:0); } for(i=0;i<10;i++) { printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d ", pz(arr[i][0])?arr[i][0]:0, pz(arr[i][1])?arr[i][1]:0, pz(arr[i][2])?arr[i][2]:0, pz(arr[i][3])?arr[i][3]:0, pz(arr[i][4])?arr[i][4]:0, pz(arr[i][5])?arr[i][5]:0, pz(arr[i][6])?arr[i][6]:0, pz(arr[i][7])?arr[i][7]:0, pz(arr[i][8])?arr[i][8]:0, pz(arr[i][9])?arr[i][9]:0); }
=> J ... in der Theorie 2