This is a read-only archive of the old Scratch 1.x Forums.
Try searching the current Scratch discussion forums.

#1 2011-12-16 07:06:09

matthew8092001
Scratcher
Registered: 2010-09-12
Posts: 100+

Prime number generator help-java

Yeah, so I was trying to make the computer list 100 prime numbers. But when I execute this, it only shows one: 3. (No, I do not want 2.)
Could someone please help try to make this print 100 prime numbers instead of just one? I'm not sure if it has something to do with the break statement, but it shouldn't cancel all loops, just the one that it is encased in.
Thanks in advance!

Code:

public class primenumbers {
    public static void main (String[]args){
    int prime = 0;
    int repeater = 1;
    int number = 3;
    for (repeater = 1; repeater < 100; repeater++)/*repeat 100 times*/{
    
    int divisor = 2;
    for(divisor = 2; divisor < number; divisor++ ){
        if (number % divisor == 0){
            prime = 0;
            break;
        }
        else{
            prime = 1;
        }
    }
    if (prime==1){
    System.out.println(number);
    number++;
    }
    
    }/*end for loop here*/
    
    }}

http://1.bp.blogspot.com/_GVA115I1I8Y/TMGwbJ056kI/AAAAAAAABHs/kpvg0oCKV2g/s1600/happy.gif
lol

Offline

 

#2 2011-12-16 07:51:57

blob8108
Scratcher
Registered: 2007-06-25
Posts: 1000+

Re: Prime number generator help-java

I'm no expert at Java, but I think it's because the "number++" line is inside the if block. Try moving it outside...?  smile

Otherwise, I think it'll never move past the first number that isn't prime. You still want to increment the variable "number", even if one of the numbers isn't a prime — does that make sense?  smile

ie, try:

Code:

public class primenumbers {
    public static void main (String[]args){
        int number = 3;
        int repeater;
        for (repeater = 1; repeater < 100; repeater++)/*repeat 100 times*/{
            int prime = 1;
            for(int divisor = 2; divisor < number; divisor++ ){
                if (number % divisor == 0){
                    prime = 0;
                    break;
                }
            }
            if (prime==1){
                System.out.println(number);
            }
            number++;
        }/*end for loop here*/   
    }    
}

(I tidied the code slightly, too; my apologies — I hope it still works...  tongue )

Last edited by blob8108 (2011-12-16 07:58:11)


Things I've made: kurt | scratchblocks2 | this cake

Offline

 

#3 2011-12-16 08:53:38

nXIII
Community Moderator
Registered: 2009-04-21
Posts: 1000+

Re: Prime number generator help-java

You might also want to use the bool type instead of an int:

Code:

bool prime = true;
...
if (prime) {
    ...
}

(It won't break your code to do it with an int, but it's more semantically correct and sometimes takes up less space)

Last edited by nXIII (2011-12-16 08:54:19)


nXIII

Offline

 

#4 2011-12-16 09:37:40

ZeroLuck
Scratcher
Registered: 2010-02-23
Posts: 500+

Re: Prime number generator help-java

nXIII wrote:

You might also want to use the bool type instead of an int:

Code:

bool prime = true;
...
if (prime) {
    ...
}

(It won't break your code to do it with an int, but it's more semantically correct and sometimes takes up less space)

It's "boolean" in Java, not "bool".

Code:

boolean prime = true;
...

big_smile

Last edited by ZeroLuck (2011-12-16 09:37:49)


http://3.bp.blogspot.com/-oL2Atzp0Byw/T465vIQ36dI/AAAAAAAAADo/1vqL4PvhkM0/s1600/scratchdachwiki.png

Offline

 

#5 2011-12-16 10:08:55

nXIII
Community Moderator
Registered: 2009-04-21
Posts: 1000+

Re: Prime number generator help-java

ZeroLuck wrote:

It's "boolean" in Java, not "bool".

Code:

boolean prime = true;
...

big_smile

Oh, thanks  wink . I've been writing too much C# lately....

Last edited by nXIII (2011-12-16 10:09:40)


nXIII

Offline

 

#6 2011-12-16 20:46:04

matthew8092001
Scratcher
Registered: 2010-09-12
Posts: 100+

Re: Prime number generator help-java

blob8108 wrote:

I'm no expert at Java, but I think it's because the "number++" line is inside the if block. Try moving it outside...?  smile

Otherwise, I think it'll never move past the first number that isn't prime. You still want to increment the variable "number", even if one of the numbers isn't a prime — does that make sense?  smile

ie, try:

Code:

public class primenumbers {
    public static void main (String[]args){
        int number = 3;
        int repeater;
        for (repeater = 1; repeater < 100; repeater++)/*repeat 100 times*/{
            int prime = 1;
            for(int divisor = 2; divisor < number; divisor++ ){
                if (number % divisor == 0){
                    prime = 0;
                    break;
                }
            }
            if (prime==1){
                System.out.println(number);
            }
            number++;
        }/*end for loop here*/   
    }    
}

(I tidied the code slightly, too; my apologies — I hope it still works...  tongue )

Still only prints 3 D:
i have no idea what's wrong.
*Extra useless info from advice dog.
http://i44.tinypic.com/vmvwb9.jpg
More like advice fifth grader, cause I'm in fifth grade -_-

Last edited by matthew8092001 (2011-12-16 20:56:33)


http://1.bp.blogspot.com/_GVA115I1I8Y/TMGwbJ056kI/AAAAAAAABHs/kpvg0oCKV2g/s1600/happy.gif
lol

Offline

 

#7 2011-12-16 21:15:38

MathWizz
Scratcher
Registered: 2009-08-31
Posts: 1000+

Re: Prime number generator help-java

This works for me:

Code:

public class primenumbers {
    public static void main(String[] args) {
        for (int number = 3; number < 100; number++)
            if (isPrime(number))
                System.out.println(number);
    }

    static boolean isPrime(int n) {
        boolean p = true;
        for (int i = 2; i < n; i++)
            if (n % i == 0)
                p = false;
        return p;
    }
}

http://block.site90.net/scratch.mit/text.php?size=30&amp;text=%20A%20signature!&amp;color=333333

Offline

 

#8 2011-12-17 08:29:20

joefarebrother
Scratcher
Registered: 2011-04-08
Posts: 1000+

Re: Prime number generator help-java

well, i know how to do it in C++.

Code:

#include <iostream>

using namespace std

int main(){
 int const max_number (100);
 int const max_test (floor(sqrt(double(max_number)));
 bitset<max_number + 1> primes;
 primes.set();    //treat everything as prime until we know better
 primes[1] = 0 ;  //1 is not prime
 for (int i (1); i != max_test; ++i){
  if (primes[i]){  //if i is prime
   for (int j (i*i); j < max_test; j += i){  //eliminate multiples of i
    primes[j] = 0
  }
 }
 cout << "Here are a list of primes less than " << max_number << ": \n"
 for (int i (1); i != max_number + 1;  ++i){ //display results
  if (primes[i]){
   cout << primes[i] <<'\n'
  }
 }
}

Would it be possible to convert that to java?


My latest project is called http://tinyurl.com/d2m8hne! It has http://tinyurl.com/d395ygk views, http://tinyurl.com/cnasmt7 love-its, and http://tinyurl.com/bwjy8xs comments.
http://tinyurl.com/756anbk   http://tinyurl.com/iplaychess

Offline

 

#9 2011-12-17 11:07:52

matthew8092001
Scratcher
Registered: 2010-09-12
Posts: 100+

Re: Prime number generator help-java

joefarebrother wrote:

well, i know how to do it in C++.

Code:

#include <iostream>

using namespace std

int main(){
 int const max_number (100);
 int const max_test (floor(sqrt(double(max_number)));
 bitset<max_number + 1> primes;
 primes.set();    //treat everything as prime until we know better
 primes[1] = 0 ;  //1 is not prime
 for (int i (1); i != max_test; ++i){
  if (primes[i]){  //if i is prime
   for (int j (i*i); j < max_test; j += i){  //eliminate multiples of i
    primes[j] = 0
  }
 }
 cout << "Here are a list of primes less than " << max_number << ": \n"
 for (int i (1); i != max_number + 1;  ++i){ //display results
  if (primes[i]){
   cout << primes[i] <<'\n'
  }
 }
}

Would it be possible to convert that to java?

I only know PHP, Java, and Javascript  tongue


http://1.bp.blogspot.com/_GVA115I1I8Y/TMGwbJ056kI/AAAAAAAABHs/kpvg0oCKV2g/s1600/happy.gif
lol

Offline

 

#10 2011-12-17 11:24:04

matthew8092001
Scratcher
Registered: 2010-09-12
Posts: 100+

Re: Prime number generator help-java

MathWizz wrote:

This works for me:

Code:

public class primenumbers {
    public static void main(String[] args) {
        for (int number = 3; number < 100; number++)
            if (isPrime(number))
                System.out.println(number);
    }

    static boolean isPrime(int n) {
        boolean p = true;
        for (int i = 2; i < n; i++)
            if (n % i == 0)
                p = false;
        return p;
    }
}

THANKS!!!!!ONE!111111111111!!!!!!!!!!seven!!!!!!!


http://1.bp.blogspot.com/_GVA115I1I8Y/TMGwbJ056kI/AAAAAAAABHs/kpvg0oCKV2g/s1600/happy.gif
lol

Offline

 

Board footer