so i try to help you with that code ( still without understanding the purpose )
by put in a diagnostic line at each function,
- so you know when it is executed
- you know what is returned
and i hope it helps you with your project
code
// https://discourse.processing.org/t/calling-a-function-that-returns-array-stops-printarray/6108
int ws=6, ls=6;
int sx=0;
int ex=findex();
int myline[] = new int[ls+1];
int posx = 100, posy = 100, w = 20; // rect grid settings
boolean dbug = true; // print each function result
void setup() {
background(255);
size(640, 640);
for (int i = 1; i<ls+1; i++) myline[i]=i; // set in some numbers as test ??
myline=grabline(); // this overwrites it? but gives same, see print
}
void draw() {
for ( int i =0; i<ls*ws; i++) rect(posx+w*(i%ws), posy+w*floor(i/ws), w, w);
}
int findex() {
int result=-1;
result+=(ws*ls);
if (dbug) println("findex_result: "+result);
return result;
}
int[] details(int nom, int smallw) {
int[] r = new int[6]; // keep local
r[0]=nom;
r[1]=smallw;
// denominator will always go in once to larger number above
if (smallw>0) for (int total=smallw; total<=nom; total+=smallw) {
// how many w go into nom
r[2]++;
r[3]=total+smallw;
r[4]=total;
}
// find Error in total+smallw
int nearzero=greater(r[0], r[3]) - lesser(r[0], r[3]);
// find error in total
int nearzero2=greater(r[0], r[4]) - lesser(r[0], r[4]);
r[5]=lesser(nearzero, nearzero2);
// if E better when total+smallw best, add 1 to R
if (nearzero<nearzero2) {
r[2]++;
}
if (dbug) {
println("details_r: ");
println(r);
}
return r;
}
int greater(int nominator, int denominator) {
int g=0;
if (nominator>denominator) {
g=nominator;
}
if (denominator>=nominator) {
g=denominator;
}
if (dbug) println("greater_g: "+g);
return g;
}
int lesser(int nominator, int denominator) {
int result=0;
if (nominator<denominator) {
result=nominator;
}
if (denominator<=nominator) {
result=denominator;
}
if (dbug) println("lesser_result: "+result);
return result;
}
int w(int l, int w) {
if (l>w) {
if (dbug) println("w_: "+(l-w));
return l-w;
}
if (w>l) {
if (dbug) println("w_: "+(w-l));
return w-l;
}
if (dbug) println("w_: 0");
return 0;
}
int l(int sx, int ex) {
int c=ex;
int L=0;
while (c>=sx) {
c-=ws;
L++;
}
if (dbug) println("l_L: "+L);
return L;
}
int d(int sx, int ex) {
int L=0;
int c=ex;
int result=0;
while (c>=sx) {
c-=ws;
L++;
}
result=ex-(ws*(L-1)-sx);
if (dbug) println("d_result: "+result);
return result;
}
int[] grabline() {
int mylength=l(sx, ex);
int mywidth=d(sx, ex)+1;
int mydepth=d(sx, ex);
int longside=greater(mylength, mywidth);
int shortside=lesser(mylength, mywidth);
int w=w(longside, shortside);
int nom=greater(shortside, w);
int denom=lesser(shortside, w);
int r[]=details(nom, denom);
int subtract=ex;
int depth=mydepth;
int x=0;
if (dbug) println("grabline_myline:");
printArray(myline);
return myline;
}