Oshrib
Oshrib

Reputation: 1900

Java - for() loop and arrays

The next question is from test that I've done.. I've run the code on BlueJ and don't get why the return value is 5...

public int mystery(int[] myStuff, int num) {

    for (int k = myStuff.length - 1; k >= 0; k--) {
        if (myStuff[k] < num) {
            return k;
        }
    }

    return -1;
}

myStuff = 2, 4, 0, 1, -6, 3, 8, 7, 5

num = 4

In the test I wrote - 0. Why 5? I don't get it!

What is the part of the

`return -1`

?

Upvotes: 1

Views: 189

Answers (7)

Mat
Mat

Reputation: 206879

It returns five because that's the index of 3 in your input array, which is the first number strictly smaller than 4 starting from the end of your array.

return -1; would be executed if none of the items in your array satisfy the "strictly smaller than num" criteria.

Upvotes: 2

darlinton
darlinton

Reputation: 2131

mystery(myStuff=[2,4,0,1,-6,3,8,7,5], 4)

then the for begins

for (int k = 8; k>=0; k--) if ( myStuff[8]=5 < 4) - NO

2nd iteration

k = 7 if (7 < 4) - NO

... so on

k = 6 if (8 < 4) - NO

k = 5 if (3 < 4) - YES - so return k = 5

The last part means: if myStuff does not have any value < num then it returns -1

Upvotes: 0

Nilanchala
Nilanchala

Reputation: 5941

your return-1 doesn't mean anything for the parameters you have passed here. as the condition is true for value 3 so it returns the value of k, which is nothing but 5 bt that movement. this is because you are iterating backwards.

Upvotes: 0

phihag
phihag

Reputation: 288260

This function just searches for the last value in the array which is greater or equal than num. Let's compute the check myStuff[k] < 4 for all values:

   0      1     2     3     4     5      6      7     8   // k
   2      4     0     1    -6     3      8      7     5   // myStuff[k]
true  false  true  true  true  true  false  false  false  // myStuff[k] < 4

The last index for which myStuff[k] < 4 is true is obviously 5, so that's the correct answer.

return -1 is needed so that the function returns a value, even if all elements of myStuff are larger than num. For example, with num = -99, the result would be -1.

Upvotes: 1

aroth
aroth

Reputation: 54856

You're getting 5 because that is the index of the first element in the array whose value is less than 4 (when starting from the last element and working towards the first). Note that you have:

return k;

...where k is your array index. If you wanted to get the value at that index, you should do:

return myStuff[k];

Here's a simple example that shows that your result is in fact correct: http://ideone.com/7byIY

And the return -1; is just saying "if no elements are less than the specified number then return a value of -1 to indicate that no match was found". This is not an uncommon practice (returning an intentionally chosen, invalid value to indicate that there is no result).

Upvotes: 2

Artefacto
Artefacto

Reputation: 97845

That function gives the position of the last number in the first argument that's smaller than the second argument (or -1 if all the numbers are larger than the second argument; -1 is a special value with no chance of ambiguity because there's no position -1).

That number is 3 and its position is 5 (starting with 0).

Upvotes: 1

Patrick87
Patrick87

Reputation: 28332

The function returns the largest index in the array corresponding to a value less than the target. This is accomplished on arbitrary arrays by scanning from the back and returning the first index corresponding to a value less than the target. In your example, 3 < 4 at index 5, so this is the correct answer. If no values smaller than the target are found, -1 is used as a sentinel value to indicate the algorithm failed to find a valid answer.

Upvotes: 1

Related Questions