On Aug 19, 2013, at 4:20 PM, Mike Duigou <mike.dui...@oracle.com> wrote:

> 
> On Aug 19 2013, at 13:12 , Guy Steele wrote:
> 
>> 
>> On Aug 19, 2013, at 3:17 PM, Mike Duigou <mike.dui...@oracle.com> wrote:
>> 
>>> - I find disallowing the zero bounds and empty ranges slightly annoying. It 
>>> requires me to externally special case for situations such as:
>>> 
>>> Random ran = new Random();
>>> String[] users = {"Fred"}; 
>>> 
>>> someUser = users[mine.nextInt(users.length - 1)];
>>> 
>>> This is a frequently used idiom. Yes, forcing the random number generator 
>>> to return zero is silly but for symmetry it is convenient. An empty range 
>>> isn't an obvious error (though the "String[] users = {};" case is obviously 
>>> an error).
> 
>> If you want a free choice among ALL elements in the (non-empty) array, then
>> 
>>  someUser = users[mine.nextInt(users.length)];
>> 
>> is what you want; and if the array is empty, then you'll get an exception 
>> from the nextInt method rather than the array indexing step, but that 
>> amounts to the same thing: an inability to pick an element from an empty 
>> array.
> 
> Doh, yes. I knew it was important to document that bounds was exclusive--I 
> managed to confuse myself….

That happens to all of us.  :-)

--Guy

Reply via email to