This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
jadelade's profile picture

Lua Program Pulling a java error!

Started by jadelade, 05 July 2013 - 11:05 PM
jadelade #1
Posted 06 July 2013 - 01:05 AM
My program (iz9SESzF[setup to pull the error after starting it and pressing "Q". sorry for the messy/ugly program]) is chucking a java error at me (java.lang.ArrayIndexOutOfBoundsException) and i need a little help punching it out… IF I CAN!
M4sh3dP0t4t03 #2
Posted 06 July 2013 - 01:59 AM
java.lang.ArrayIndexOutOfBoundException is happening when a function is called more than 256 times at once. This probably is because the play function is calling itself at line 345(I'm not sure if that's the problem, but i'ts the only thing I saw after looking over the code quickly that could cause this).
jadelade #3
Posted 06 July 2013 - 02:44 AM
Thats what i was thinking i dont know much about java. can you suggest a better way of repeating the function?
xbsktball10x #4
Posted 06 July 2013 - 03:01 AM
while true do
function()
end

this is of course assuming you have a yield in your function otherwise it will throw the "running to long without yielding" exception
jadelade #5
Posted 06 July 2013 - 03:12 AM
i will need to use more logic than just that.
xbsktball10x #6
Posted 06 July 2013 - 03:14 AM
I cant find anywhere in the code that would be throwing this. I happens to me if i call a call a function inside of its own function. i did just look it over quickly but maybe look for a function calling itself. The only thing i can see there being a problem would be calling draw() alot inside of all the other functions
theoriginalbit #7
Posted 06 July 2013 - 03:31 AM
Thats what i was thinking i dont know much about java. can you suggest a better way of repeating the function?
The problem has nothing to do with you programming anything for Java. The only reason it shows a Java error is because the problem occurs in the Java implementation of Lua (LuaJ), where the stack object used to store the function call stack overflows and throws and exception. Read what I say in the next quote to find an answer of 2 fixes, one which is highly recommended and the other is a temporary solution before doing the first fix.

while true do
function()
end
this is of course assuming you have a yield in your function otherwise it will throw the "running to long without yielding" exception
Not quite, the only way that it can be fixed is with a restructure of the code which I highly recommend to the OP short of that tail calls could be used to stop the recursive loop.

return play( value )
but I still say you should restructure the code so that it follows a better design pattern so that there is no need for recursion or tail calls!


can you please post the code
OP has the code in there
iz9SESzF
Edited on 06 July 2013 - 01:34 AM
jadelade #8
Posted 06 July 2013 - 05:59 AM
Thats what i was thinking i dont know much about java. can you suggest a better way of repeating the function?
The problem has nothing to do with you programming anything for Java. The only reason it shows a Java error is because the problem occurs in the Java implementation of Lua (LuaJ), where the stack object used to store the function call stack overflows and throws and exception. Read what I say in the next quote to find an answer of 2 fixes, one which is highly recommended and the other is a temporary solution before doing the first fix.

while true do
function()
end
this is of course assuming you have a yield in your function otherwise it will throw the "running to long without yielding" exception
Not quite, the only way that it can be fixed is with a restructure of the code which I highly recommend to the OP short of that tail calls could be used to stop the recursive loop.

return play( value )
but I still say you should restructure the code so that it follows a better design pattern so that there is no need for recursion or tail calls!

I was thinking of having a while loop to repeat the line of code if it repeat the same table in the programs table. Would this improve(not fully fix it) the problem?
jadelade #9
Posted 07 July 2013 - 01:07 AM
nevermind i just started returning the play()