好的,所以我在用户的一些输出中说话,它必须是4个数字,并且数字不能相同。所以一切正常,接受我检查4个数字相互对应的部分。我把字符串放入一个数组,然后比较数组 检查第一个,第二个,第三个,第四个, 然后我检查第二个,第三个和第四个 然后我检查第四个数字与第四个
我的问题是if语句无论我尝试什么它都会被绕过每次都无效。我在代码中添加随机返回以查看它的去向,无论怎样,即使我输入的数字是1111它仍然通过,它总是返回12。
我花了好几个小时尝试不同的东西,请帮助我!!
function validate(guess){
var user_guess = guess;
var valid = true;
var counter = 0;
parseFloat(user_guess);
if(user_guess.length == 4){
if((user_guess == null) || (isNaN(user_guess))){
validation_alert();
}else{
var guess_string = toString(user_guess);
var guess_array = guess_string.split('');
var guess_array2 = guess_array;
for(var i = 0; i < 3; i++){
counter = i + 1;
for(c = counter; c < 4; c++){
if(guess_array[i] == guess_array2[c]){
return 11;
valid = false;
validation_alert();
}
}
}
if(valid == true){
return 12;
}else{
return 13;
validation_alert();
}
}//if null
}else{
validation_alert();
}//if 4 end tag
}// function close
答案 0 :(得分:1)
只是为了向您证明JavaScript使用函数范围而不是阻止范围(if else for ...
),这意味着您声明的每个var
都会自动移动到它正在运行的当前函数的顶部。
另请注意,当您return
时,您将退出当前函数,之后不再执行任何操作。
如果您检查length
,您可以确定它将是一个数字,所以请使用===
来检查它的类型(数字,字符串,布尔)。
我认为你的两个if
陈述应该颠倒过来。在任何情况下,user_guess == null
永远不会验证if
之前的length === 4
检查。
通常当你使用return
时,每个块范围都应返回一些内容。我没有编辑过这个,但是在严格的javascript中这是预期的。
从valid=false
开始似乎更符合逻辑,只有当你确定它是真的时才会将它设置为true。我会把它留给你。
function validate(guess){
var user_guess = parseFloat(guess),
guess_string,
guess_array,
guess_array2,
valid = true,
counter = 0,
i = 0,
c;
if (!user_guess || isNaN(user_guess)){
validation_alert();
} else {
if (guess.length === 4){
guess_string = user_guess.toString();
guess_array = guess_string.split('');
guess_array2 = guess_array;
for (i; i < 3; i++){
counter = i + 1;
c = counter;
for (c; c < 4; c++){
if (guess_array[i] == guess_array2[c]){
valid = false;
validation_alert();
return 11;
}
}
}
if (valid){
return 12;
} else {
validation_alert();
return 13;
}
} else {
validation_alert();
}
}
}
答案 1 :(得分:1)
如果你只是需要检查字符串是否有4个唯一的数字,这样就更容易了:
function isValid(str){
var unique={};
for(var i=0;i<str.length;i++){//for each character in the string
unique[str[i]]=true;//we add the character as a key in unique object(the =true doesnt really matter)
}
var chars=Object.keys(unique);//we get an array with the keys in the object(we get an array with the unique characters)
if(chars.length != 4) return false; //if the unique chracters are different than 4, its not valid so return false
chars.sort();//we order the array in lexicographical order
if(chars[0]>= '0' && chars[0] <='9' && chars[3]>= '0' && chars[3] <='9') return true;//if the first character and the last ones are digits, then the ones in the middle wil be digits as well because of the sort we made. If they are, return true
return false;//if they are not both digits, return false
}
console.log(isValid('1111'))//false
console.log(isValid('9230'))//true
console.log(isValid('1343'))//false
console.log(isValid('a412'))//false
console.log(isValid(''))//false