我目前正在阅读一份AP计算机科学考试学习指南,但我遇到了其中一个问题。
String s = "mathematics";
String vowels = "aeiou";
int number = 0;
for(int i = 0;i<s.length();i++){
number += s.indexOf(vowels.substring(0));
}
代码执行后number
的值是多少?我得出11的结论,因为元音的第一个索引是“a”所以第一次在s
中出现的是索引1.在11个循环之后会导致11。但由于某种原因正确答案是-11。我可以理解它是否为负数,因为只要在字符串中找不到它就会返回-1。但我完全迷失了为什么会出现这种情况。任何帮助表示赞赏!
答案 0 :(得分:2)
首先,要认识到vowels.substring(0)
没有做任何事情。位置0
的子字符串等同于字符串本身。
字符vowels
或"aeiou"
未显示在"mathematics"
的任何位置,因此indexOf
将返回-1
11次("mathematics"
}是长度11
)。因此,最后number
的结果为-11
。
虽然不清楚你想要什么,但如果你想获得字符串s
中每个元音的位置,你将不得不重新编写for
循环并使用charAt(i)
或substring(i, i + 1)
。
答案 1 :(得分:0)
那是因为substring(0)返回完整的字符串。
您可以尝试这样理解:
System.out.println(vowels.substring(0));
vowels.substring(0)的结果是“aeiou”,而字符串s(“数学”)中不存在“aeiou”。