Итак, в нескольких словах я создал класс, расширяющий RandomGenerator, чтобы случайным образом вернуть PRIME, POWER OF 2 (2,4,8,16,32,64,128 и т. Д.), FIBONACCI AND SQUARE NUMBERS (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