To answer your question, .indexOf will return
0 or greater for any match and
-1 for no match. The index value returned is zero based, so if you, for example, test 'ark'.indexOf('a') > 0, the answer will always be false because the return will be 0 (the first character in the string).
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)
If you changed your if test to read:
if(VOWELS.indexOf(word.charAt(i)) != -1)
{
numVowels++;
}
it would make more sense.
Another change I would make is your vowels string, make it just uppercase (I've read that uppercase is best to test against but could be wrong) and then convert the string you are testing to uppercase before testing. This would cut down on the total loops (if your worried about that). As shown below, you could use a temporary string (_toTest) if you need to use the input string in your print line at some point.
private void printNumVowels(String word)
{
final String VOWELS = "AEIOU";
string _toTest = word.toUpperCase();
int numVowels = 0;
for (int i = 0; i < _toTest.length(); i++)
{
if (VOWELS.indexOf(_toTest.charAt(i)) != 0)
{
numVowels++;
}
}
System.out.println("Number of vowels: " + numVowels);
}
Another thing that bugged me is when initializing your for loop, you used numVowels to initialize i, it may not hurt anything but to me it's just something I wouldn't do unless you intend on dynamically changing the start position of your loop.
I haven't tested this code, I typed it out on my tablet and it's 5am so just be warned! =)