DECLARE
i number(3);
j number(3);
BEGIN
i := 2;
LOOP
j:= 2;
LOOP
exit WHEN ((mod(i, j) = 0) or (j = i));
j := j +1;
END LOOP;
IF (j = i ) THEN
dbms_output.put_line(i || ' is prime');
END IF;
i := i + 1;
exit WHEN i = 50;
END LOOP;
END;
代码正常运行。我试图找出它是如何工作的,并最终得到4作为素数,这不是。如果你能帮我理解这个嵌套循环是如何工作的,我会非常感激。
谢谢。
答案 0 :(得分:2)
让我们重写它,使它更简单:
FOR .. IN ..
所有它正在做的是,在外部循环中通过数字2 .. 50并且在内部循环中检查是否存在完全分成该值的数字;如果有,那么继续外循环,如果没有那么输出该数字是素数。
您的代码实际上是相同的代码,但由于不使用<!DOCTYPE html>
<html>
<body>
<button id="one">Try it</button>
<h1>JavaScript Functions</h1>
<p id="demo"></p>
<script>
var x=document.getElementById("one").addEventListener("click", onefunction);
function onefunction(){
//document.getElementById('demo').innerHTML=x;
return 1;
}
循环
答案 1 :(得分:2)
代码正在查找最多50个所有素数。外部循环只是检查i
的每个值,从2到50,看看该整数是否为素数。
对于i
的每个值,它会尝试将该整数除以每个其他整数,从2开始。如果i
可被j
整除且没有余数({ {1}}为零)然后不素数;除非它只能被自己整除(mod
)。
一旦找到j=1
的值(j
除以i
,或者它自身达到i
,它就退出该内循环。
然后需要进一步检查以确定哪些条件实际导致它退出;因此,它是否真的是素数。
你可以用更清晰的(IMHO)逻辑做同样的事情:
BEGIN
<<OUTER>>
FOR i IN 2..50 LOOP
FOR j IN 2..i-1 LOOP
IF (mod(i, j) = 0) THEN
CONTINUE OUTER;
END IF;
END LOOP;
dbms_output.put_line(i || ' is prime');
END LOOP;
END;
/
答案 2 :(得分:0)
如果我理解你的问题。
当i = 4
和j = 2
然后条件((mod(i, j) = 0) or (j = i))
导致从内循环退出时,条件(j = i )
为false并且程序没有转到行{ {1}}