Javascript 函数记录未定义且不是素数
对不起,这个简单而愚蠢的问题 我创建了一个函数,如果一个数字是素数或不是素数,它将返回一个布尔值Javascript 函数记录未定义且不是素数,javascript,Javascript,对不起,这个简单而愚蠢的问题 我创建了一个函数,如果一个数字是素数或不是素数,它将返回一个布尔值 function isPrime(num) { var prime = true; for(i = 2; i < num; i++) { if (num % i === 0) { var prime = false break; } } return prime; } 但是由于某种原因,give(),正在将我的日志记录回未定义状态
function isPrime(num) {
var prime = true;
for(i = 2; i < num; i++) {
if (num % i === 0) {
var prime = false
break;
}
}
return prime;
}
但是由于某种原因,give()
,正在将我的日志记录回未定义状态
我不知道为什么,谢谢你的帮助
提前谢谢各位。对于任何输入错误,我深表歉意。函数give(userInput){
function give(userInput){
// i is less or equal to the userInput
for(let i = 0; i <= userInput; i++) {
if(isPrime(i)) {
console.log(i);
}
}
}
//i小于或等于userInput
对于(设i=0;i您根本没有声明i
。这意味着i
是在全局范围内创建的:isPrime()
和give()
都在引用(并修改相同的i
),这是一个问题
give()
中循环的另一个问题:
只有当用户输入“2”时,循环体才会执行
修改后的代码应如下所示:
function isPrime( num ) {
let prime = true ;
for( let i = 2 ; i < num && prime ; i++ ) {
prime = prime && ( num % i !== 0 );
}
return prime;
}
function give( userInput ) {
for( let i = 1 ; i <= userInput ; i++ ) {
if ( isPrime(i) ){
console.log(i);
}
}
}
将(i=1;i===userInput-1;i++)的更改为(i=1;i关于if(isPrime(i)==true)
,if(isPrime(i))
就足够了。停止在for循环中重新定义变量,在for循环中将此var prime=false
更改为justprime=false
确保userInput
是一个数字。userInput=parseInt(userInput)
应该这样做。@Nicholas Carey,感谢缩进重新格式化!我正要指出,没有缩进是一种负担……这确实解决了我的问题。谢谢你的帮助。
for(i = 1; i === userInput - 1; i++) { ... }
function isPrime( num ) {
let prime = true ;
for( let i = 2 ; i < num && prime ; i++ ) {
prime = prime && ( num % i !== 0 );
}
return prime;
}
function give( userInput ) {
for( let i = 1 ; i <= userInput ; i++ ) {
if ( isPrime(i) ){
console.log(i);
}
}
}
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97