Pizzaman
Pizzaman

Reputation: 425

Javascript find max number from 3 inputs

I've just began Javascript in college. One task is to define and call a function to find the maximum number from 3 numbers entered by the user. I know there is a max() function but we were told to do it manually using if and else if.

I'm going wrong somewhere as you can see. It's just telling me the max is 0 everytime.

function maxNum(num1, num2, num3){
        var max = 0;
        if(num1 > num2){
            if(num1 > num3){
                num1 = max;
            }
            else{
                num3 = max;
            }
        }
        else{
            if(num2 > num3){
                num2 = max;
            }
        }
    return max;
    }

    for(i=0;i<3;i++){
        parseInt(prompt("Enter a number"));
    }
    document.write(maxNum());

Upvotes: 2

Views: 20985

Answers (8)

GIT  GT
GIT GT

Reputation: 1

var num1 = 40 
var num2 50 
var num3 =70

if (num1 > num2 && num1 >num3 && num1 != num2 && num1 != num3) 
}
console.log ("max = " + num1 )
}

else if ( num2 > num1 && num2 >num3 && num2 != num1 && num2 != num3) {
console.log ("max = " + num2 )

}

else if ( num3 > num1 && num3 >num2 && num3 != num1 && num2 != num3) {
console.log ("max = " + num3 )

}

else {
console.log ("numbers are equal")
}

if ( num1 < num2 && num1 < num3 && num1 != num2 && num1 != num3 ) {
console.log("min = " + num1)
}

else if ( num2 < num1 && num2 < num3 && num2 != num1 && num2 != num3) {
console.log("min = " + num2)

}

else if ( num3 < num1 && num3 < num2 && num3 != num1 && num2 != num3) {
console.log ("min = " + num3 )

}

Upvotes: 0

Raihan Biswas
Raihan Biswas

Reputation: 1

    //Raihan
    // program to find the largest among three numbers 
    
    // take input from the user using Prompt
    
    let num1 = parseFloat(prompt("Enter first number: "));
    let num2 = parseFloat(prompt("Enter second number: "));
    let num3 = parseFloat(prompt("Enter third number: "));
    
    let largest = Math.max(num1, num2, num3);
    
    // display the result
    document.write("The largest number is " + largest);




**//another way**
const num1 = parseFloat(prompt("Enter first number: "));
const num2 = parseFloat(prompt("Enter second number: "));
const num3 = parseFloat(prompt("Enter third number: "));


// check the condition
if(num1 >= num2 && num1 >= num3) {
    document.write("Largest Number : " + num1)
}
else if (num2 >= num1 && num2 >= num3) {
    document.write("Largest Number : " + num2)
}
else {
    document.write("Largest Number : " + num3)
}

Upvotes: 0

Kimi2Greatness
Kimi2Greatness

Reputation: 11

The updated direct answer is this :

function maxNum(num1, num2, num3){
    return [num1, num2, num3].sort(function (a, b) { return b - a })[0];
}

If written like this, it can easily be modified to take any amount of numbers by passing it an array of said numbers.

var numArray = [num1, num2, num3, num4, ...];
function maxNum(numArray){
    return numArray.sort(function (a, b) { return b - a })[0];
}

The details :

Take an array :

[5,42,16]

Now sort it.

[5,42,16].sort()

But this wont work because javascript .sort requires a function to be passed in. This function tells it how to sort the array.

This will sort it highest to lowest, e.g. a is less then b.

function (a, b) { return b - a }

This will sort it lowest to highest, e.g. b is less then a.

function (a, b) { return a - b }

So we add it in :

[5,42,16].sort(function (a, b) { return b - a })

But this returns the sorted array, not the maximum number.

So we pick the first element in the array :

[5,42,16].sort(function (a, b) { return b - a })[0]

Lastly, you can pull out the sort function. This is mostly for demo purposes though.

var maxSorter = function (a, b) { return b - a };
function maxNum(numArray){
    return numArray.sort(maxSorter)[0];
}

Upvotes: 1

Suresh KUMAR Mukhiya
Suresh KUMAR Mukhiya

Reputation: 606

Or you can use ES6 syntax, to compute largest of three numbers in easier way,

const largest = a => F = b => G = c => ((a > b && a > c) ? a : (b > a && b > c) ? b : c)

console.time()
console.log(largest(53)(30907)(23333))
console.timeEnd()

Upvotes: 3

dr jimbob
dr jimbob

Reputation: 17721

First in javascript and most modern programming language assignment like a = b copies the value of b into the variable a. It is not equivalent to b = a (which copies the value of a into the variable b). It's common to write a = 1, but a syntax error in most languages to write 1 = a. Thus, you don't want to write num1 = max, but instead write max = num1.

Second, your logic is incorrect as it won't treat the case maxNum(1,2,3) correctly. (Work through the logic when num1 < num2 and num2 < num3. The following code would work:

function maxNum(num1, num2, num3){
    var max = 0;
    if(num1 > num2){
        if(num1 > num3){
            max = num1;
        }
        else{
            max = num3;
        }
    }
    else{
        if(num2 > num3){
            max = num2;
        } else {
            max = num3;
        }
    }
    return max;
}

Granted, I would probably write something like

function max3num(num1, num2, num3) {
    var max_so_far = num1;
    if (num2 > max_so_far) {
       max_so_far = num2;
    }
    if (num3 > max_so_far) {
       max_so_far = num3;
    }
    return max_so_far;
}

as the logic is very clear and it will be easy to extend to a max function with a larger number of elements to compare if necessary. (Adding in a for loop could make it variadic fairly easily). It is straightforward to see the logic works, because we start with the first element being the maximum so far (max_so_far), then consider if the second element is larger -- if so we assign that as max_so_far, and keep continuing until we have compared all the elements to the max_so_far. After we have considered each element once, we then return the max_so_far which will now be the maximum of all of them.

Upvotes: 2

Travis J
Travis J

Reputation: 82267

No real need for a function here, just compare them as the come in!

var max = 0; 
for(var i=0;i<3;i++){ 
 var val = parseInt(prompt("Enter a number"));
 max = max > val ? max : val; 
} 
alert(max);

Upvotes: 1

Bijan
Bijan

Reputation: 8594

One problem you have is that you do not save the number the user inputs. You prompt them, parse it as an int and then nothing. You have to pass the 3 numbers into maxNum()

Here is a working example that uses proper left hand assignment and saves the number. Also it is a good idea to use >= instead of > because the user can enter 2 of the same number

function maxNum(num1, num2, num3){
        var max = 0;
        if((num1 >= num2) && (num1 >= num3)){
            max = num1;
        }
        else if((num2 >= num1) && (num2 >= num3)){
            max = num2;
        }
        else{
            max = num3;
        }
    return max;
    }

    var arr = []; 
    for(i=0;i<3;i++){
        arr[i] = parseInt(prompt("Enter a number"));
    }


    document.write(maxNum.apply(this, arr));

Upvotes: 2

ariel_556
ariel_556

Reputation: 378

easiest way:

function maxNum(num1, num2, num3){
    var tmp = 0;
    if(num1 < num2 && num3 < num2) {
        tmp = num2;
    } else if(num3 < num1){
        tmp = num1;
    } else {
        tmp = num3;    
    }
    return tmp;
}
var arr = [];
for(var i = 0; i < 3; i++) {
    arr[i] = prompt("Enter a number");
}
console.log(maxNum.apply(this, arr));

Upvotes: 2

Related Questions