All right. Let's look at our last one and it doesn't get a whole lot easier here. We assume a 2D array a of ints is declared and initialized and it's not shown. It's, I think, always just makes it a little bit more challenging. This code is supposed to copy all of the elements of the odd columns, by the way, it should really be every other column, into a new array called b with a line of code is missing, where? This is one of the hardest questions to answer. It's like I have to read and completely understand your code as you thought of it to solve this problem. I can't just do it my own way because I got to find your missing line of code. On the other hand, it's very good real world skill. As you as a teacher who's, I'm sure by now debugged many programs, understands. So the answer is option A or C, which once we find out what we're going to initialize it to, well, let's just say we're going to initialize i to zero at each of those points. You see both of those are inside the outer loop, but outside of the inner loop. So since we're only using it in the inner loop, it's functionally equivalent to putting it either place. So let's walk through and analyze the code again. So first off, did I declare my new array b correctly? It was only going to have half as many columns as the other one because I'm going to copy every other column from the original one into there. Same number of rows, a dot length, a sub-zero dot length divided by two to get our columns. Since we're doing every other one, if you think about it, if it's five columns, it'd be zero, two, and four. Oh gosh, I think I need to add one. Yes, I do. All right, write a little plus 1 in there. I'll make a reading afterwards, because sometimes these mistakes are actually interesting and useful, someone has told me. So I'll make a reading explaining the difference. Okay, odd, so we're looping over all the rows; no problem, it's the columns, right? We don't need to get all of the columns. I could put an if statement in there in the middle. But what I can also do is increase column by two every time. So I'd start at 0, 2, 4, 6, 8, every other column, and yeah, it's the odd columns. Isn't it the first column, the third column, and the fifth column? You can argue with me that that wasn't right. I should've said the even columns or every other column starting with zero or something maybe a little bit more explicit, that would be fine. That would be a good argument to make. All right. Now, what are we doing inside the inner loop? First thing, very nice that I misspelled original, but we're copying the original a array, the row and column, and since we know we're increasing column by two every time, we're only going to get every other one. But this is the tricky part. In b, we only have half as many columns as we did for a. So what we're doing is we're basically using the same row information, but the column is going to count up. It's going to start at zeroth column, then the first column, then the second column, and the third column for that row. It starts at zero and I can see i++. So it's counting up. But does it just keep counting up forever, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10? No. Because we're looping over each row, over all the columns. Then over the next row over all the columns, over the next row over all the columns. We have to reset it when we get to that next row, and so in fact, the solution to this would be to put an i equals 0 either right before you start looping over the columns again on the next row or after you're finished to be like, okay, I'm resetting it so that for the next time I go around, I'll be starting off with the zeroth column. Either place would be fine. Both places is kind of a waste. You're just causing the computer to do slightly amount of extra work and would confuse a fellow software engineer reading your code. All right, what was the real option here? If you chose Option B, that would be resetting it for every column, so basically i would always be zero. You'd only fill in column zero, now interestingly, you can think about what column would you actually fill that in with. Oh yeah, the last one. The last one that we're actually copying over, that would be the one that would get filled in. But we would only be filling in in the new array b, it would always be 0 because we'd add 1 to it and then we immediately set it back to 0.