我在解决方案附近吗?我总是得到双倍数量的辅音.
我确信这是正确的做法.
function consonants(str) {
var countConsonants = 0;
for (var i = 0; i <= str.length; i++) {
if (str[i] !== "a" || str[i] !== "e" || str[i] !== "i" ||
str[i] !== "o" || str[i] !== "u" || str[i] !== " ") {
countConsonants += 1;
}
}
return (countConsonants);
}
consonants("asdfghaaa");Run Code Online (Sandbox Code Playgroud)
我期待5的答案,即sdfgh辅音.
你的逻辑是有缺陷的,你的条件中的运算符应该是AND &&而不是OR ||,因为你想比较所有的chars而不仅仅是其中一个:
function consonants(str) {
var countConsonants = 0;
for (var i = 0; i < str.length; i++) {
if (str[i] !== "a" && str[i] !== "e" && str[i] !== "i" &&
str[i] !== "o" && str[i] !== "u" && str[i] !== " ") {
countConsonants++;
}
}
return (countConsonants);
}
console.log(consonants("asdfghaaa"));Run Code Online (Sandbox Code Playgroud)
注意:循环应该停止,length-1因为数组是基于0的,所以替换:
for (var i = 0; i <= str.length; i++) {
__________________^^
Run Code Online (Sandbox Code Playgroud)
通过:
for (var i = 0; i < str.length; i++) {
__________________^
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
小智 2
计数的主要问题在于您的条件。
每当其中一个条件失败时,您就会增加辅音的数量(这就是||所谓的 OR 运算符)。因此,每当一个字符!== "a"OR时!== "e",您都会增加计数,这是错误的。(假设 a 是!== 'e',所以你将 a 算作辅音)。
将||二元运算符改为&&(AND);这样,只要当前字符出现,您就只会增加辅音计数str[i]不在您正在验证的值(a、e、i、o、u、' ')中,您就只会增加辅音计数。
正如其他人指出的那样,您也可能会遇到错误,因为 i 的最大值应该是 Length-1。
您还需要考虑其他问题:
对于初学者来说,这可能不相关,但非常值得了解这些技术:创建一个包含您正在验证的所有值的数组 [“a”,“e”等] 更具可读性然后,对于源字符串中的每个字符,只需验证 array.indexOf(str[i]) >= 0 (这意味着该字符包含在数组中)。
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |