Because the purpose of a for loop is to iterate through a list using an index, which is not what we need to do here. If you never use the index value from the for loop, or are playing tricks with blank incrementers, you shouldn't be using a for loop. It makes your code unnecessarily confusing for anyone trying to read it. Anyone reading that code, their first reaction is not going be "oh ok simple enough", it's going to be "wait... what is this trying to do? why is it this way? what am I missing?"
As stated in the question, you want to process a queue until it is empty. The "I'm done" check should be the more logically simple "is the queue empty?" check, instead of "get the original size of the array in the beginning and then cycle through a loop that many times while removing items because if you stop and think for a second that should be the right number of times to remove all of the items from the array so we can indirectly assume that the list will be empty by then".
Several people in the the comments have given the far more simple while loop version, which accomplishes the task with a lot less code, and a lot less cognitive load for anyone reading it, besides using up less memory and CPU.
Making it a requirement to force a for loop into this problem where it is not a natural fit when there are clearly better and simpler solutions just distracts from the true objective of the question, which is "do I understand the core concepts being taught in this segment".
moderator: Perfect, thanks! I thought you meant no loop was needed, but you were specifically saying you were against having a for loop. Makes perfect sense to me.