Reputation: 1900
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
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
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
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
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
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
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
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