0

So in a few words i made a class extending the RandomGenerator to randomly giving back PRIME, POWER OF 2(2,4,8,16,32,64,128 etc) , FIBONACCI AND SQUARE NUMBERS (1,4,9,16,25,36 etc). Then i made a simple program to call my class and giving back random numbers while the user defines the space (1,n). Both programs compile just fine. My problem is that when i run the program it always returns 0 for each value. I'm new to java. Can anyone help me?

import acm.util.*;


public class RandomGeneratorImproved2 extends RandomGenerator
{

private int i,j,a,c,d,e,temp,n,Pnumber,Fnumber,number2,numbersq;

private long b;

boolean flag,flag2,flag3,flag4,flag5;

private double temp1;


public RandomGeneratorImproved2 (int n)
{
    this.n = n;
}

public void nextPrime(int n) // PRIME NUMBERS
{
        Pnumber = rgen.nextInt(1, n);
        i=2;
        flag2 = false;
        if ( Pnumber == 1 ) // Check for value 1 cause it cannot check it inside the loop
        {
            flag2=true;
        }
        while ( (i<n) && (flag2 == false) )  
        {
            flag = true;
            j=2;
            do 
            {
                a = i%j;
                if ( (a == 0) && (i != j) )
                {
                    flag = false;
                }
                if (i!=j-1)
                {
                    j = j+1;
                }

            } while ( j<i );
                if ((flag == true) && (Pnumber==i)) // 
                {
                    flag2 = true;
                } 
                if ((i==99) && (flag2==false)) // restart if the number is not prime
                {
                    i = 1;
                    Pnumber = rgen.nextInt(1, n);
                }
                i = i + 1;
        }
}

public int getPrime() //POWER OF 2 NUMBERS
{
    return Pnumber;
}

public void nextPowerof2(int n) 
{
        number2 = rgen.nextInt(1, n);
        i=1;
        b=2;
        flag3 = false;      
        while ( i<n ) // n <= 31
        {
            if (number2 == b)
                {
                    flag3 = true;
                }
            b = 2*b;
            if ((i == n-1) && (flag3==false))
            {
                i=1;
                number2 = rgen.nextInt(1,n);
                b=2;
            }
            i=i+1;
        }
}

public int getPowerof2()
{
    return number2;
}

public void nextFibonacciNumber(int n) // FIBONACCI NUMBERS
{
    Fnumber = rgen.nextInt(1, n);
    c=0;
    d=1;
    flag4 = false;
    i=1;
        while ( i<n && flag4==false ) 
        {
            temp = d;
            d = d + c;
            c = temp;
            i=i+1;
            if (Fnumber == d)
            {
                flag4 = true;
            }
            if ((flag4 == false) && (i==n))
            {
                i=1;
                c=0;
                d=1;
                Fnumber = rgen.nextInt(1, n);
            }
        }
}

public int getFibonacciNumber()
{
    return Fnumber;
}

public void setSquareNumber(int n) // SQUARE NUMBERS
{
    numbersq = rgen.nextInt(1, n);
    flag5 = false;
    i=1;
    temp1 = Math.sqrt(n);
    while ( i<temp1 && flag5 == false ) 
        {
            e = i*i;
            i = i + 1;
            if ( numbersq == e )
            {
                flag5 = true;
            }
            if ( i == 20 && flag5 == false )
            {
                i=1;
                numbersq = rgen.nextInt(1, n);
            }
        }
}

public int getSquareNumber()
{
    return numbersq;
}

public String toString()
{
    return "Your Prime number is : " + Pnumber + "\nYour Power of 2 number is : " + number2 + "\nYour Fibonacci number is : " + Fnumber + "\nYour square number is : " + numbersq;
}
  private RandomGenerator rgen = RandomGenerator.getInstance();

}

import acm.program.*;

public class caller2 extends Program
{
    public void run()
    {
        int n = readInt("Please give me an integer to define the space that i'll look for numbers : ");
        RandomGeneratorImproved2 r1 = new RandomGeneratorImproved2(n);
        println(r1);
    }
}
dhta
  • 1
  • 2

1 Answers1

0

As stated you've only defined those method. You never call any of the methods that are setting those values so all are still in their initialized state. Try adding the following to the constructor after setting n;

nextPrime(n);
nextFibonaccitNumber(n);
nextPowerof2(n);
sjrcgtek
  • 18
  • 6