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