0
所以几句话我做扩展RandomGenerator一类随机回馈PRIME,2的幂(2,4,8,16,32,64,128等),菲波纳奇和一些平方数(1 ,4,9,16,25,36等)。然后,我做了一个简单的程序来调用我的班级,并在用户定义空间(1,n)时给出随机数字。这两个程序编译得很好。我的问题是,当我运行程序时,它总是为每个值返回0。我是新来的Java。谁能帮我?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);
}
}
你永远不会调用任何应该初始化你的字段的方法。 – resueman
但我打电话给全班同学。难道它不应该让我回到这些价值吗? – GiannisMil
当您创建对象时,它会调用构造函数。当你打印它时,它会调用'toString()'。除非你显式调用其他方法,他们将不会被调用。 – resueman