having trouble printing an array of prime numbers that has been resized
HI, im having trouble with my printPrimeNumbers() method printing the current state of an array, I can only get it to print the original state it was in. The array is inside of a primeNumbers object. I used checkAndResize to resize that array. my printPrimeNumbers method must be void without a parameter. How could i get my PrintPrimeNumbers method to print out a resized array without modifying the parameter? Any ideas.
Here is my PrimeNumbers class:
/**
* Created by IntelliJ IDEA.
* User: Kevin
* Date: Mar 4, 2007
* Time: 1:53:56 AM
* To change this template use File | Settings | File Templates.
*/
package primes;
publicclass PrimeNumbers{
privateboolean [] sieve;
public PrimeNumbers(int upper){
initializeSieve(upper);
}
publicint getNthPrime (int n){
int prime = 0;
double num;
if (n >= sieve.length)
checkAndResize(n + 1);
for (int i = 0; i < sieve.length; i++){
if(sieve[i])
prime++;
if (prime == n)
return i;
if (prime < n && i == sieve.length -1)
checkAndResize(2*sieve.length);
}
return -1;
}
publicint getNumberPrimeNumbers(int n){
int primes = 0;
for (int i =0 ; i < sieve.length ; i ++){
if (n > sieve.length){
checkAndResize(n);
if(sieve[i])
primes++;
}
elseif (sieve[i])
primes++;
}
return primes;
}
publicint getSieveSize ()
{
return sieve.length;
}
publicboolean isPrime (int n){
if (n > sieve.length){
checkAndResize(n);
//initializeSieve(n);
}
return sieve[n];
}
// prints out the prime numbers inside sieve
publicvoid printPrimeNumbers(){
int n = 0;
boolean first =true;
System.out.print("[");
for(int i = 0; i < sieve.length - 1; i++){
n++;
if(sieve[i] ==true && n != sieve.length - 1){
if(first) first =false;
else System.out.print(" ");
System.out.print(i);
}
}
System.out.println("]");
}
// checks length of sieve with N and then resizes sieve if nessecary.
privatevoid checkAndResize (int n){
if ((n + 1) >= sieve.length){
initializeSieve(2*n);
}
}
privatevoid setMultiples (int k){
for (int i = 2*k; i < sieve.length; i += k)
sieve [i] =false;
}
privatevoid initializeSieve (int upper){
if ( upper < 2)
sieve =newboolean [2];
else
sieve =newboolean [upper + 1];
sieve[0] =false;
sieve[1] =false;
for (int i =2 ; i< sieve.length; i ++ )
sieve[i] =true;
int bound = (int) Math.ceil(Math.sqrt(sieve.length));
for (int i = 2 ; i < bound ; i ++)
if (sieve[i])
setMultiples (i);
}
private String booleanToString (boolean value)
{
if (value)
return"T";
else
return"F";
}
public String toString (){
StringBuffer buf =new StringBuffer("[");
for (int i = 0; i < sieve.length -1 ; i ++)
buf.append(booleanToString (sieve[i]) +" " );
buf.append(booleanToString (sieve[sieve.length -1]) +"]");
return buf.toString();
}
}
here is the client code
PrimeNumbers test =new PrimeNumbers(16);
System.out.println(test);
System.out.println("There are " + test.getNumberPrimeNumbers(16) +
" prime nummbers in the sieve from 1 to 15. \n");
System.out.println("There are " + test.getNumberPrimeNumbers(26) +
" prime numbers in the resized sieve from 1 to 25.");
System.out.println("\nThe first 25 prime numbers are:");// makes sense why it doesnt work
test.printPrimeNumbers();
System.out.println("\nThe 13th prime number is: " + test.getNthPrime(13));
System.out.println();
System.out.println("The number 3001 is prime: " + test.isPrime(3001));
do you see how my methods resized it?
here is the output:
[F F T T F T F T F F F T F T F F F]
There are 6 prime nummbers in the sieve from 1 to 15.
There are 15 prime numbers in the resized sieve from 1 to 25.
The first 25 prime numbers are:
[2 3 5 7 11 13 17 19 23 29 31 37 41 43 47]// this is only the first 15 elements
The 13th prime number is: 41
The number 3001 is prime: true
thanks for taking your time to look at this

