The jarray class provides an OO COBOL wrapper for manipulating Java arrays. It is fully documented in the Java Run-time Class Library Reference, which is in help\mfcobol.docs.zip (Windows) or docs/mfcobol.docs.zip (UNIX) in your COBOL development system installation.
The following COBOL program gets an array from a Java object, finds its dimensions, and displays the contents of the array.
$set ooctrl(+p-f)
Program-id. ReadArray.
class-control.
arraydemo is class "$Java$arraydemo"
.
thread-local-storage section.
01 aJavaObj object reference.
01 theTotal pic 9(9).
01 CDims pic x(4) comp-5.
01 Dims.
03 Dims-entry pic x(4) comp-5 occurs 256.
01 Bounds.
03 Bounds-entry pic x(4) comp-5 occurs 256.
01 ind0 pic x(4) comp-5.
01 ind1 pic x(4) comp-5.
01 arrayElement pic x(4) comp-5.
01 wsTable object reference.
01 wsResult pic x(4) comp-5.
procedure division.
invoke arraydemo "new" returning aJavaObj
invoke aJavaObj "getArray" returning wsTable
*> find out the number of elements in the array
invoke wsTable "getDimensions" returning CDims
display "The array has " CDims " dimension(s)"
*> get the number of elements in each dimension
display "dimensions are " with no advancing
invoke wsTable "getBounds" using Bounds
perform varying ind0 from 1 by 1 until ind0 > CDims
display Bounds-entry(ind0) with no advancing
if ind0 < CDims
display " by " with no advancing
end-if
end-perform
display " "
*> display each element in the array
perform varying ind0 from 0 by 1
until ind0 = Bounds-entry(1)
move ind0 to Dims-entry(1)
perform varying ind1 from 0 by 1
until ind1 = Bounds-entry(2)
move ind1 to Dims-entry(2)
invoke wsTable "getElement" using
by value CDims
by reference Dims
by reference arrayElement
display "Element " ind0 ","
ind1 " is " arrayElement
*> modify the contents of the array
add 50 to arrayElement
invoke wsTable "putElement" using
by value CDims
by reference Dims
by reference arrayElement
end-perform
end-perform
This is an implementation of the Java arraydemo class used by ReadArray. This program creates a two-dimensional array.
import com.microfocus.cobol.*;
import java.io.*;
public class arraydemo extends RuntimeSystem
{
int myArray[][];
public arraydemo()
{
myArray = new int[5][2];
int i,j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 2; j++)
myArray[i][j] = i * 100 + j;
}
}
public int[][] getArray()
{
return myArray;
}
}