Jump to content
hisoka

javascript code does not show result

Recommended Posts

I have this javascript code and when I run it it does not print the result :
 

function isprime(n)
{

  if (n<2)
  {
   return false;
  }
 
  var q = Math.floor(Math.sqrt( n));
   
  for( i = 2 ; i<= q ; i++)
  {
    var result = n%i;
    
    if(result==0)
       
      
     {
      
     return false;
     
      }
    
   else
     
    {
     document.write(result);
    }
    
  }
 
}


var prime = isprime(100);

I do not know why ? any help on what is the problem is and how to solve it

Share this post


Link to post
Share on other sites

That function isn't written very well, it doesn't even always return a value.  If you actually give it a prime number like 17 it doesn't return any value at all.  If a function is going to return a value, it should always return a value.  That function will never return true, how are you supposed to know if the number is prime or not?

Share this post


Link to post
Share on other sites

That is why I put the code here and asked for help because I do not know how  that function will return a value , how it will print it in the computer screen so that I can see it . What to do so that the function is well written and how to do it !!

Quote

how are you supposed to know if the number is prime or not?

Generally I know that an integer is a prime if it is not divisible by any prime  less or equal to its square root hence we have in that code  the

  var q = Math.floor(Math.sqrt( n));

it gives the square root of a number combined with math.floor and the for loop it takes n % i which is n % all numbers that are less or equal to the square root of n and dismisses or ignore all the numbers that are divisible by n as they are not prime .

 

Moreover the role of the function is not to look if n is a prime or not otherwise to give all the primes between 2 and n

My problem is I cannot make it print the values . You wrote that is it not well written , it does not return a value ....... I know all that . So what do you suggest to make it well writeen , return a value and print it in the screen . What is the substitution ? any suggest from you on what to do ?

Share this post


Link to post
Share on other sites

First, don't use document.write.  That might mess up testing.  Use console.log to print anything you want to the console, including debugging information.  If you want to test what the function does you can print that also, e.g.:

console.log("isprime(12):");
	console.log(isprime(12);
	console.log("isprime(17):");
	console.log(isprime(17);

Make sure that every path through the function will result in a return statement.  There is no "return true" in that function, that should be an indication that it's not doing what it's supposed to do.

Share this post


Link to post
Share on other sites

I changed that code with another code :
 

function calculate(n)
{
for(i=0 ; i<=n ; i++)
{
 var isprime = false;
 for(j=2 ; j<=n ; j++)
 {
 if(i%j===0 && i!==j)
   {
    isprime = true;
   }
 }
 if(isprime===false)
   {
     console.log(i+"\n");
     
   }
 
}

}

console.log(calculate(17));

then it gives me :

1
 
2
 
3
 
5
 
7
 
11
 
13
 
17

undefined

I do not know why get undefined and how to correct the code so that I do not get undefined

Share this post


Link to post
Share on other sites

You got undefined because the function is not returning anything. The function must use the return statement.

  • Thanks 1

Share this post


Link to post
Share on other sites

Just remove calculate(17) from console log(), it will add each value to console log without the need for return, also in Firefox the undefined shows for a Firefox file 'content.js' whixch is unrelated (check far right for filename causing undefined)

Share this post


Link to post
Share on other sites

IF you still want to use console.() to call function with argument, store each value in variable and return THAT final result to console.log

            function calculate(n)
            {
                var results = "";
                for (i = 0; i <= n; i++)
                {
                    var isprime = false;
                    for (j = 2; j <= n; j++)
                    {
                        if (i % j === 0 && i !== j)
                        {
                            isprime = true;
                        }
                    }
                    if (isprime === false)
                    {
                        results += i + "\n";

                    }

                }
                return results;
            }

            console.log(calculate(25));

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Now I am trying to take a number as input in box and once I press ok all the primes that are less than it are generated I did like this :
 

function calculate(x)
{
var x = prompt("enter a number");

var results = "" ;
var y=parseInt(x);
  
 

for(i=0 ; i<n ; i++)
{
 var isprime = false;
 for(j=2 ; j<n ; j++)
 {
 if(i%j===0 && i!==j)
   {
    isprime = true;
   }
 }
 if(isprime===false)
   {
 
     results += i + "\n";
   }

}
return results; 
}

console.log(calculate(x));

but it gives no result . I know that something I added in the code is wrong but I do not know how to correct it .

Edited by hisoka

Share this post


Link to post
Share on other sites

You are prompting for input within the scope of function to x variable, while calling the function with argument  outside the scope of function. It will never be able to know the variable x equals.

  • Thanks 1

Share this post


Link to post
Share on other sites

Values arent being returned unless n is less than 2. Also, I'm not sure I think this is the best way to approach it:
 

Quote

 

function isPrime(int n){

        if(n<2){

               return false;

           }   else if(n==2){

                   return true;

         }  

   else if(n%2==0){

                     return false;

                 }else{

                     for(int num=3; num+=2; num<n){

                           if(n%num==0){

                                  return true;

                     }

             }

              return false;

     }

}


 

This is because is a number is divisible by any even number, it's definitely divisible by 2. Just a suggestion on improving the efficiency.

Share this post


Link to post
Share on other sites
4 hours ago, mbpowner said:

         for(int num=3; num+=2; num<n){

for(var num=3 ; num<n ; num+=2)

 

Share this post


Link to post
Share on other sites

Yh whoops, that's what I meant LOL. My bad. Just bcuz I code in java normally so it's easy to get carried away with the language and forget the syntax for the specific language.  And that for loop was written in a bit of a rush. My apologies

 

also just realized. There should be no int in the parameter of the function :P

Edited by mbpowner

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×