0
<!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>

This program accepts 3 numbers through prompt. Only for specific numbers it gives strange and unexpected output. If I give input for this program as 5,21 and 100 when each prompt appears, the output will be given 5 as a largest number. Even for the input 10,24 and 5, the output will be 5.

Is there any problem while using if condition or array.

Please help me.

Suhaib Janjua
  • 3,538
  • 16
  • 59
  • 73
learner
  • 276
  • 1
  • 3
  • 16

5 Answers5

3

You're not actually passing numbers to the function. prompt() values are stored as strings.

Lexicographically, "5" is greater than "100" since "5" comes after "1".

You need to use parseInt() to ensure integers are passed in, or if you allow decimal values, then parseFloat().

var large = Max(parseInt(num1, 10), parseInt(num2, 10), parseInt(num3, 10));

See jsFiddle

You may wish to do the number parsing within the Max() function to ensure that the arguments are always integers.

Also, the initial assignment of arguments[num1, num2, num3] to largest doesn't make sense. The variable just needs to be declared. You also have an unnecessary loop in your function.

rink.attendant.6
  • 44,500
  • 61
  • 101
  • 156
1

Another example related to this could be

var myArray = [45,50,2,99,0];
var result = Math.max.apply(Math,myArray);
document.write("Max value is = "+result );

Hope its solve your confusion.

Anand Deep Singh
  • 2,560
  • 3
  • 22
  • 28
0

There are a few issues with your code. First of all, you shouldn't try to access multiple values inside the arguments, especially not by values instead of indexes.

var largest;

should be enough in your case. Next, you are running a for loop multiple times for absolutely no purpose, since you're checking the condition already. Decide if you want to use a for look or chained else/if statements. Also, by looking at your code, it looks like you want to make this function accept as many parameters as you want, and this implementation of yours does not support that. So, here is a fixed version of the code that should work with just about any number of parameters (more than 0).

function Max(){
    var largest;
    for(i=0;i<arguments.length;i++){
        var intval = parseInt(arguments[i]);
        if (intval > largest)
            largest = intval;
    }
    return largest;
}
SeinopSys
  • 8,787
  • 10
  • 62
  • 110
0

You can use method like that:

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"))

You can play with demo

Advanced example

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));
}

Play with advanced demo

Farkhat Mikhalko
  • 3,565
  • 3
  • 23
  • 37
0

You need to use parseInt to ensure that the numbers are treated as numbers and then the ordering is as you expect.

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)
guymid
  • 1,186
  • 8
  • 11