function rot13(str) {
var yahoo = [];
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 64 && str.charCodeAt[i] < 91){continue;}{
var cnet = str.charCodeAt(i);
yahoo.push(cnet);
} else {
var j = str.charCodeAt(i);
yahoo.push(j);
}
}
var ugh = yahoo.toString();
return ugh;
}
rot13("SERR PBQR PNZC");
尝试在for循环中使用if else语句并且在else语句中遇到一些问题(Getting&#34;语法错误:其他意外的令牌&#34;)。现在的主要目标是尝试操纵字符串字母字符,同时传递其他字符(即空格,感叹号等)。当然有一种更简单的方法可以做到这一点,但实际上只是想知道在循环中写一个if else语句和我出错的问题是什么。感谢帮助
答案 0 :(得分:5)
您的if
:
if (str.charCodeAt(i) > 64 && str.charCodeAt[i] < 91)
{continue;} // actual body of the if
{ // just a random block of code
var cnet = str.charCodeAt(i);
yahoo.push(cnet);
}
第二个根本不属于if
,因为if
只能获得一个代码块。这就是为什么else
是“意外”的原因。
答案 1 :(得分:0)
您正在尝试在完成if语句后调用语句。在您致电if
之前,您的continue;
会生成else
,然后会执行其他操作。尝试重构continue;
。它与for循环没有任何关系:)
答案 2 :(得分:0)
尝试在for循环中使用if else语句并在else语句中遇到一些问题(Getting&#34;语法错误:其他意外的令牌&#34;)。
但实际上只是想知道在循环中写一个if else语句和我出错的地方有什么问题
您没有编写if..else
语句,而是if
语句和代码块,您尝试添加else
语句;这个别的说法在那里没有意义。
您的代码如下所示:
//this is your condition
if (str.charCodeAt(i) > 64 && str.charCodeAt[i] < 91){
continue;
}
//and this is an anonymous code block; anonymous, because you could name it
{
var cnet = str.charCodeAt(i);
yahoo.push(cnet);
//and such code-blocks have no `else`,
//that's why you get the error,
//this else doesn't belong to the condition above
} else {
var j = str.charCodeAt(i);
yahoo.push(j);
}
你的问题是{continue;}
部分,它会将你的积木的全部内容改为我所描述的内容
当然有一种更简单的方法
是的,您可以使用String#replace,并将a-m
替换为n-z
,反之亦然
//a little helper
const replace = (needle, replacement) => value => String(value).replace(needle, replacement);
//the definition of `rot13` as a String replacement
const rot13 = replace(
/[a-m]|([n-z])/gi,
(char,down) => String.fromCharCode(char.charCodeAt(0) + (down? -13: 13))
);
let s = "SERR PBQR PNZC";
console.log("input: %s\noutput: %s", s, rot13(s));
&#13;
说明:match[0]
始终包含整个匹配的字符串,此处为char
;并且我在[n-z]
周围添加了一个小组,以便match[1]
也称为down
。当角色是n-z时填充down
,但如果角色是a-m则不填充。
因此我知道,如果填写char.charCodeAt(0) - 13
,我必须char.charCodeAt(0) + 13
否则void main() { }