<!doctype html>
<html>
<head>
<title>Largest number</title>
</head>
<body>
<center>
<h2>largest number</h2>
<script language="Javascript" type="text/Javascript">
function Max(num1,num2,num3)
{
var largest=arguments[num1,num2,num3]
for(i=0;i<arguments.length;i++)
{
if((num1>num2)&&(num1>num3))
largest=num1
else if((num2>num1)&&(num2>num3))
largest=num2
else
largest=num3
}
return(largest)
}
document.write("</br>")
var num1 = prompt("Enter first number"," ")
var num2 = prompt("Enter second number"," ")
var num3 = prompt("Enter third number"," ")
var large = Max(num1,num2,num3)
document.write("You entered",num1,",",num2,",",num3)
document.write("</br>")
document.write("The largest number is :",large)
</script>
</center>
</body>
</html>
该程序通过提示接受3个号码。仅针对特定数字,它会产生奇怪和意外的输出。如果我在每个提示出现时将此程序的输入设为5,21和100,则输出将作为最大数字给出5。即使输入10,24和5,输出也是5。
使用if条件或数组时是否有任何问题。
请帮帮我。
答案 0 :(得分:3)
您实际上并没有将数字传递给该函数。 prompt()
值存储为字符串。
按字典顺序,“5”大于“100”,因为“5”在“1”之后。
您需要使用parseInt()
来确保传入整数,或者如果允许小数值,则需要parseFloat()
。
var large = Max(parseInt(num1, 10), parseInt(num2, 10), parseInt(num3, 10));
请参阅jsFiddle
您可能希望在Max()
函数中进行数字解析,以确保参数始终为整数。
此外,arguments[num1, num2, num3]
到largest
的初始分配没有意义。该变量只需要声明。你的函数中也有一个不必要的循环。
答案 1 :(得分:1)
与此相关的另一个例子可能是
var myArray = [45,50,2,99,0];
var result = Math.max.apply(Math,myArray);
document.write("Max value is = "+result );
希望它能解决你的困惑。
答案 2 :(得分:0)
您的代码存在一些问题。首先,您不应该尝试访问arguments
内的多个值,尤其是不是通过值而不是索引。
var largest;
在你的情况下,应该足够了。 接下来,您正在多次运行for循环,绝对没有目的,因为您已经检查了条件。决定是否要使用for look或chained else / if语句。此外,通过查看您的代码,您似乎希望使此函数接受您想要的任意数量的参数,并且您的此实现不支持该功能。所以,这里是一个固定版本的代码,可以使用几乎任意数量的参数(大于0)。
function Max(){
var largest;
for(i=0;i<arguments.length;i++){
var intval = parseInt(arguments[i]);
if (intval > largest)
largest = intval;
}
return largest;
}
答案 3 :(得分:0)
你可以使用这样的方法:
var max = function(){
var p = [];
for(var i = 0; i < arguments.length; i++)
p.push(parseInt(arguments[i]) || null);
return Math.max.apply(Math.max, p);
}
console.log(max(1, 2, "123" ,"4", "null", "123123123"))
您可以使用demo
高级示例
var max = function(){
var p = [];
for(var i = 0; i < arguments.length; i++){
p.push(parseInt(arguments[i]) || null);
}
return Math.max.apply(Math.max, p);
}
var number = prompt("Enter the number of input");
if(parseInt(number) != NaN){
var l = [];
for(var i = 0; i < parseInt(number); i++){
var e = prompt("Enter number #" + (i+1));
l.push(e);
}
alert("Largest number is " + max.apply(null, l));
}
使用高级demo
进行游戏答案 4 :(得分:0)
您需要使用parseInt来确保将数字视为数字,然后按照您的预期排序。
function Max(num1,num2,num3)
{
var largest=arguments[num1,num2,num3]
for(i=0;i<arguments.length;i++)
{
var i1 = parseInt(num1);
var i2 = parseInt(num2);
var i3 = parseInt(num3);
if((i1>i2)&&(i1>i3))
largest=i1
else if((i2>i1)&&(i2>i3))
largest=i2
else
largest=i3
}
return(largest)
}
document.write("</br>")
var num1 = prompt("Enter first number"," ")
var num2 = prompt("Enter second number"," ")
var num3 = prompt("Enter third number"," ")
var large = Max(num1,num2,num3)
document.write("You entered",num1,",",num2,",",num3)
document.write("</br>")
document.write("The largest number is :",large)