このように変数の値を表示することができますが、
これがループ内にある場合、
次々にメッセージが表示されてしまい対応できなくなる可能性もあります。
このような場合は、
confirm を使います。
confirm は
alert
とフォーマットは同じですが、メッセージボックスに「OK」と「キャンセル」
ボタンが現れます。OKボタンを押すと
true が、
キャンセルボタンを押すと
false が返ります。
function test2(form) {
with(form.text1)
value = primenumber(parseInt(value));
}
function primenumber(i) {
var j, k, squareroot;
var n = 1;
var p = new Array(i);
if(i == 1) //ここは無くても結果的には同じ
return 2;
p[0] = 2;
for(j = 3; n < i; j++) { //素数がi個になるまで素数を探す
squareroot = Math.sqrt(j + 0.5);
//整数をその平方根以下の素数で割り切れるかどうかを調べる
for(k = 0; p[k] < squareroot; k++)
if(j % p[k] == 0)
break;
if(p[k] > squareroot) //割り切れなかったら
{
p[n++] = j; //新しい素数として追加
if(!confirm(j)) hoe(); //新しい素数を表示
}
}
return --j;
}
テキストボックスに自然数(n)を入れてボタンを押してください。
n番目の素数が返ります。
メッセージボックスでOKボタンを押したときにはそのまま、
キャンセルボタンを押したときには処理を変えてやります。
色々やり方はあるかと思いますが、
一番お手軽なのはわざとエラーを出してプログラムをストップさせることでしょう。
上のやり方でもいいですが、時にはいちいち変数の値を表示するのではなく、
一気にファイルに変数の値の変化を書き出したい場合もあるでしょう。
そんな場合、次のような方法ではどうでしょう。
var szdebug;
function test3(form) {
var str;
szdebug = "";
with(form.text1)
value = primenumber2(parseInt(value));
//最後にテキストで表示する
str = szdebug; //オープンする前にローカル変数に格納
var w = window.open(); //新たなウィンドウを開く
w.document.open("text/plain");
w.document.write(str); //テキストを書く
w.document.close();
}
function primenumber2(i) {
var j, k, squareroot;
var n = 1;
var p = new Array(i);
if(i == 1)
return 2;
p[0] = 2;
for(j = 3; n < i; j++) {
squareroot = Math.sqrt(j + 0.5);
for(k = 0; p[k] < squareroot; k++)
if(j % p[k] == 0)
break;
if(p[k] > squareroot)
{
p[n++] = j;
szdebug += j + "\n"; //最後に書き出す文字を格納しておく
}
}
return --j;
}
数字を入れてボタンを押すと、新たなウィンドウが開き素数が表示されます。
テキストボックスにあまり大きな値を入れないでください。非常に時間がかかります。
せいぜい 10000 くらいまでにしておきましょう。
このようにすると、見たい変数の値が全て最後に表示されます。