2016-09-06 7 views
1

なぜそれが次のように正常に動作していることである:コードの2つのチャンクは別々に動作しますが、一緒には動作しません。

var howMany = prompt("How many numbers?"); 
 
    
 
var myArray = []; 
 

 
for(var i = 0; i < howMany; i++){ 
 
    myArray.push(prompt("Enter a number")); 
 
} 
 
alert(myArray);

上記のコードは、どのように多くの数の彼らは、配列の中に置くつもり、それは配列を表示しているユーザーに依頼することを意図しています。


このコードは以下のコードでも問題ないようです。 提供されている配列があります。 次に、コードは数値が実際に数値であるかどうかをチェックします。 その後、すべての数値が加算されます。


var myArray = [1,2,3,4,5]; 
 

 
isDataUniform(myArray); 
 
function isDataUniform(array) { 
 

 
var first = array[0]; 
 
var length = array.length; 
 
for (i=0; i<length; i++){ 
 
    \t 
 
    \t if(typeof array[i]!== typeof first){ 
 
    \t \t return false; 
 
} 
 
    \t  \t 
 
} 
 
return true; 
 
} 
 

 
if (isDataUniform(myArray) === true){ 
 
    \t add(myArray); 
 
} else { 
 
\t console.log("cant do adding"); 
 
} 
 

 
function add(array) { 
 

 
var f = 0; 
 
var length = array.length; 
 
for (i=0; i<length; i++){ 
 
    \t f+= array[i]; 
 
    \t 
 
} 
 
    \t alert("The result of addition of this set: " + myArray + " is: " + f); 
 
}

が、私は2を組み合わせると、それは動作しません。それは数字を追加しません。

var howMany = prompt("How many numbers?"); 
 

 
var myArray = []; 
 
for (var i = 0; i < howMany; i++) { 
 
    myArray.push(prompt("Enter a number")); 
 
} 
 

 

 
isDataUniform(myArray); 
 

 
function isDataUniform(array) { 
 

 
    var first = array[0]; 
 
    var length = array.length; 
 
    for (i = 0; i < length; i++) { 
 

 
    if (typeof array[i] !== typeof first) { 
 
     return false; 
 
    } 
 

 
    } 
 
    return true; 
 
} 
 

 
if (isDataUniform(myArray) === true) { 
 
    add(myArray); 
 
} else { 
 
    console.log("can't do adding"); 
 
} 
 

 
function add(array) { 
 

 
    var f = 0; 
 
    var length = array.length; 
 
    for (i = 0; i < length; i++) { 
 
    f += array[i]; 
 

 
    } 
 
    alert("Result of addition of this set: " + myArray + " is: " + f); 
 
}

あなたは私を修正するように親切にすることはできますか?

+0

は、なぜあなたは*これまで彼らが数値(またはことができるしていることを確認せずに*各配列要素が同じタイプであるかどうかをテストしています数値にキャストする)? – nnnnnn

答えて

2

の戻り値は数値ではなく文字列です。

var n = prompt("Enter a number"); 
alert("typeof(n) = " + typeof(n)); 

数値を入力しても、上記のコードでは "typeof(n)= string"と表示されます。

文字列を数値に変換する必要があります。

var howMany = prompt("How many numbers?"); 

var myArray = []; 
for (var i = 0; i < howMany; i++) { 
    myArray.push(parseInt(prompt("Enter a number"), 10)); 
} 
+0

'parseInt()'を使うつもりなら、プロンプトに ''整数を入力してください。 – nnnnnn

2

プロンプト機能は、文字列が保存されますので、ここでの問題は、あなたが文字列の合計を作るしようとしているということです。ただ、追加機能で型キャストを追加し、スクリプトが正常に動作します:

function add(array) { 
var f = 0; 
var length = array.length; 
    for (i = 0; i < length; i++) { 
    f += parseInt(array[i]); 
} 
} 
+0

これは誤った結果をもたらします。「数字を入力」すると、ユーザは「2.7」と「3.1415」を入力するか、数字ではなく「parseInt()」と入力して「123abc!それはそうです。 – nnnnnn

0
var howMany = prompt("How many numbers?"), 
    myArray = []; 

for (var i = 0; i < howMany; i++) { 
    myArray.push(parseInt(prompt("Enter a number"),10)); 
} 

function isDataUniform(array) { 
    for (i = 0; i < array.length; i++) { 
    if (typeof array[i] !== "number") { 
     return false; 
    } 
    } 
    return true; 
} 

function add(array) {  
    var f = 0; 
    var length = array.length; 
    for (i = 0; i < length; i++) { 
    f += array[i]; 
    } 
    alert("Result of addition of this set: " + myArray + " is: " + f); 
} 

if (isDataUniform(myArray) === true) { 
    add(myArray); 
} else { 
    console.log("can't do adding"); 
} 
+0

Q. A.「3.1415」を入力してください。 – nnnnnn

関連する問題