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!
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*/
}}
Offline
I'm no expert at Java, but I think it's because the "number++" line is inside the if block. Try moving it outside...?
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?
ie, try:
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...
)
Last edited by blob8108 (2011-12-16 07:58:11)
Offline
You might also want to use the bool type instead of an int:
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)
Offline
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".
boolean prime = true; ...
Last edited by ZeroLuck (2011-12-16 09:37:49)
Offline
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...?
![]()
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?![]()
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...
)
Still only prints 3 D:
i have no idea what's wrong.
*Extra useless info from advice dog.
More like advice fifth grader, cause I'm in fifth grade -_-
Last edited by matthew8092001 (2011-12-16 20:56:33)

Offline
This works for me:
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;
}
}Offline
well, i know how to do it in C++.
#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?
Offline
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

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

Offline