2015-10-18 106 views
0

新增JS,这里是问题,代码要求用户输入任意数量的数字 - 1结束,查找并显示最大和最小;它的工作除了它显示最小的最大,但最大的显示器 罚款?在javascript中使用for循环编写代码,提示用户输入任意数量的数字打印最大和最小的那些数字

var numInputs = parseInt(prompt("Please enter numbers seperated by 
     a space end with -1")) 
    var largestNum =0; 
    var smallestNum = 9999; 


if (numInputs >0) 
{ 
    for (i=1; i<=numInputs; i++) 
    { 

if (numInputs > largestNum) 
{ 
    largestNum = numInputs; 
} 
    } 
} 
alert("The largest number entered was " + largestNum); 

if (numInputs >0) 
{ 
    for (i=1; i<=numInputs; i++) 
    { 

    if (numInputs < smallestNum) 
    { 
    smallestNum = numInputs; 
    } 
    } 
} 

alert("The smallest number entered was " + smallestNum); 
+2

*“它的工作除了”* - 我真的不认为它工作。 'parseInt()'不会像你认为的那样工作:如果你给它一串空格分隔的数字,它会返回第一个数字。即使它返回了所有数字的数组,或者是所有数字的数组,您的循环也没有意义,因为您将'numInputs'与'largestNum'变量进行比较;你从不在循环中使用'i'。 – nnnnnn

回答

0

您的代码存在的问题是numInputs只会解析您输入的第一个数字。所以,如果你把字符串“1 2 3 4 5 -1”,numInputs得到值1

下面的代码片段,将解决您的问题:

var largestNum, smallestNum; 
var numInput = parseInt(prompt("Please enter the next number (-1 to exit)")); 
if (numInput != -1) { 
    largestNum = numInput; 
    smallestNum = numInput; 
} 

while (numInput != -1) { 
    if (numInput > largestNum) { 
     largestNum = numInput; 
    } else if (numInput < smallestNum) { 
     smallestNum = numInput; 
    } 
    numInput = parseInt(prompt("Please enter the next number (-1 to exit)")); 
} 

alert("Smallest number is " + smallestNum + ", largest number is " + largestNum); 

,你可以看到,我更新最小和最大的数字,因为我实时得到它们,而不是在获得所有输入之后。 另外,为了简单起见,我将第一个数字设置为最小和最大数字(不使用固定值作为0和9999,这可能是错误的)。 最后,我为每个号码单独做了一个提示,所以你不能把它们全部输入到一起。要做到这一点,你需要输入split这个字符串并存储在一个数组中,并遍历数组元素。

0
var a = [], 
    value; 

value = parseInt(prompt("Please enter numbers seperated by a space end with - 1 ")); 
while (value !== -1) { 
    a.push(value); 
    value = parseInt(prompt("Please enter numbers seperated by a space end with - 1 ")); 
} 

a.sort(); 
console.log(a); 

alert("The largest number entered was " + a[a.length-1]); 
alert("The smallest number entered was " + a[0]); 

编辑: 如果你想是大于9,使用数字排序:

a.sort(function(a,b){ return a - b }); 
+0

嗯,你只需要把一个数字,因为parseInt() –

+0

是的,这是我的观点。我会删除我以前的评论,现在你已经修改了它。 – nnnnnn

0

怎么样了一下这里重构你的代码。我们删除parseInt,因为它dosent工作,并采取输入的数字split他们的空间制作一个阵列sorting the array然后只是popingshifting号码,它只是删除最后和第一个号码。

这是example

代码:

var numbers = prompt("please enter a range of numbers separated by a space:"); 

var arrayOfNumbers = numbers.split(" ").sort(); 

alert("Lowest entered number:" + arrayOfNumbers.pop() + "\n highest entered number: " + arrayOfNumbers.shift()); 
+0

这很好,整洁,但它不会工作,因为'.sort()'不(默认情况下)做一个数字排序。 – nnnnnn

+0

@nnnnnn因为我注意到它是一个默认的字符串,所以才想起这件事。也许只是将输出值解析为一个int,如果需要的话,他会寻找它。 –

+0

你只需要将一个比较函数传递给'.sort()',它就可以正常工作:http://jsfiddle.net/mgLnxqyu/3/ - 注意你也需要按降序对它进行排序或者反向使用'.pop()'和'.shift()'(因为'.pop()'从数组的* end *中取得)。 – nnnnnn

0

你的代码不作太多的感觉。

numInputs将是一个字符串(数字用空格隔开),你需要分析它介绍数组,如:

numInputs = prompt("Please enter numbers...")).split(" "); 

那么你应该遍历数组并为您最大和最小的数字,像:

var smallestNum = numInputs[0]; 
var largestNum = numInputs[0]; 

for(var i=0; i<numInputs.length; i++) { 
    if (smallestNum > numInputs[i]) { 
     smallestNum = numInputs[i]; 
    } else if (largestNum < numInputs[i]) { 
     largestNum = numInputs[i]; 
    } 
} 
相关问题