2017-06-11 7 views
0

プログラムにシードと最大値を渡すと、すべての数値が2と3で除算され、残りが表示されます。私はそれがそれを解決する時間と次の時間との間に1秒を与えることを望みます。しかし、いつでも私はsetIntervalを使用しようとすると、2人の異なるエディタでもフリーズしてクラッシュします。入力ボックスにシードと最大値を入力すると数字が保存されず、入力ボックスではなくJavaScriptからのものが使用されるため、別の問題も発生します。おかげさまで、私は11歳で、数ヶ月前にプログラミングを始めました。ここでインクリメントがsetIntervalで機能しない

は、私がこれまで持っているものです。

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<title>Made with Thimble</title> 
<link rel="stylesheet" > 
</head> 
<body bgcolor="lightblue"> 
<div id="d2"> 
Divisible by 2 
</div> 
<div id="d3"> 
Divisible by 3 
</div> 
<div> 
    <input id="seed" type="number" placeholder="seed" value="3"><br> 
<input id="max" type="number" placeholder="max" value="8"> 
</div> 
<button onclick="count()">Count</button> 
<div id="output"></div> 
<script> 
function count(){ 

var seed= document.getElementById("seed").getAttribute("value") 
var max=document.getElementById("max").getAttribute("value") 
var temp=1 
var output=document.getElementById("output") 
temp=seed 
console.log("seed:"+seed) 
console.log("max:"+max) 
while (temp<max){ 

var intdivby2 = temp%2 
    var intdivby3 = temp%3 

document.getElementById("output").innerHTML+="remainder of "+temp+" divided 
by 2 is:"+intdivby2.toString()+"<br>" 
document.getElementById("output").innerHTML+="remainder of "+temp+" divided 
    by 3 is:"+intdivby3.toString()+"<br>" 
setInterval(function(){temp++;},1) 

    } 
     } 
      </script> 
      </body> 
     </html> 
+0

どこにセミコロンはありますか? Javascriptではすべてのステートメントはセミコロンで終わらなければなりません – flen

+0

ああ、後でセミコロンを追加します – HyperMonkey

+0

JavaScriptではセミコロンは必要ありません。 –

答えて

2

ためwhile。したがって、ループの各サイクルについて、新しいタイマーが作成されている。これはあなたがしたいことではありません。ここで

は、修正が必要なものは以下のとおりです。

  1. setInterval()の2番目のパラメータはミリ秒、ない秒単位の時間です。したがって、それを1000に変更する必要があります(1秒= 1000ミリ秒)。

  2. ループを削除し、setInterval()を1回だけ呼び出します。 1秒ごとに発生する機能では、tempの値を大きくして、必要な処置を実行します。

  3. tempmaxの値を超えると、clearInterval()と呼び出してタイマーを停止します。ここで

改訂count()関数れる:

function count() { 
    var seed= document.getElementById("seed").getAttribute("value") 
    var max=document.getElementById("max").getAttribute("value") 
    var temp=1 
    var output=document.getElementById("output") 
    temp=seed 
    console.log("seed:"+seed) 
    console.log("max:"+max) 
    var id = setInterval(function(){ 
     var intdivby2 = temp%2 
     var intdivby3 = temp%3 

     document.getElementById("output").innerHTML+="remainder of "+temp+" divided by 2 is:"+intdivby2.toString()+"<br>" 
     document.getElementById("output").innerHTML+="remainder of "+temp+" divided by 3 is:"+intdivby3.toString()+"<br>" 
     temp++; 
     if (temp > max) clearInterval(id); 
    },1000) 
} 
1

すでにあなたがsetIntervalを削除して、しばらくtemp++を追加ループproblem.BetterにsetIntervalその行くwhile loop.Dontを使用している.ANDあなたの文がありませんでした;と正しく.Addを閉じる各行は

を更新

01との直接の操作を行い終了しますの代わりに、あなたがループ内setInterval()を呼び出しているため、サイトがクラッシュした時間間隔

function count() { 
 
    var seed = document.getElementById("seed").getAttribute("value") 
 
    var max = document.getElementById("max").getAttribute("value") 
 
    var temp = 1 
 
    var output = document.getElementById("output") 
 
    temp = seed 
 
// console.log("seed:" + seed) 
 
    //console.log("max:" + max) 
 
    var timer = setInterval(function(){ 
 
    
 
    if(temp < max) { 
 
    var intdivby2 = temp % 2 
 
    var intdivby3 = temp % 3 
 
    document.getElementById("output").innerHTML += "remainder of " + temp + " divided by 2 is: " + intdivby2.toString() + " <br> " 
 
    document.getElementById("output").innerHTML += "remainder of " + temp + " divided by 3 is: " + intdivby3.toString() + " <br> "; 
 
    temp++ 
 
    } 
 
    else{ 
 
    clearInterval(timer) 
 
    } 
 
    },500) 
 
}
<body bgcolor="lightblue"> 
 
    <div id="d2"> 
 
    Divisible by 2 
 
    </div> 
 
    <div id="d3"> 
 
    Divisible by 3 
 
    </div> 
 
    <div> 
 
    <input id="seed" type="number" placeholder="seed" value="3"><br> 
 
    <input id="max" type="number" placeholder="max" value="8"> 
 
    </div> 
 
    <button onclick="count()">Count</button> 
 
    <div id="output"></div>

+0

提案をいただきありがとうございますが、達成しようとしていたのは、各ディビジョンステートメントの前に数秒間休憩することでした。そのため、setIntervalを追加して休憩しましたが、何らかの理由で動作しませんでした。 – HyperMonkey

+0

私の主な動機を明確にするためには、すべてのライマーの間に数秒間で一度に出てくるものがあります。 – HyperMonkey

+0

@HyperMonkey私の更新された答えを見てください。 '時間間隔'のwhileの代わりにsetIntervalを使用して指示します。whileループは時間間隔プロパティーを持っていません – prasanth

関連する問題