Java,构造函数不工作

时间:2015-12-08 19:42:51

标签: java constructor acm-java-libraries

所以简单地说,我做了一个类,扩展RandomGenerator以随机回馈PRIME,POWER OF 2(2,4,8,16,32,64,128等),FIBONACCI和SQUARE NUMBERS(1,4,9, 16,25,36等)。然后我做了一个简单的程序来调用我的类并在用户定义空格(1,n)时回馈随机数。两个程序都编译得很好。我的问题是,当我运行程序时,它总是为每个值返回0。我是java的新手。任何人都可以帮助我吗?

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);
    }
}

1 个答案:

答案 0 :(得分:0)

如上所述,您只定义了这些方法。您永远不会调用任何设置这些值的方法,因此所有方法仍处于初始化状态。设置n;

后,尝试将以下内容添加到构造函数中
nextPrime(n);
nextFibonaccitNumber(n);
nextPowerof2(n);