2015-12-08 2 views
0

Итак, в нескольких словах я создал класс, расширяющий 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); 
    } 
} 
+1

Вы никогда не вызываете ни один из методов, которые должны инициализировать ваши поля. – resueman

+0

Но я называю весь класс. Разве это не должно вернуть мне эти ценности? – GiannisMil

+0

Когда вы создаете объект, он вызывает конструктор. Когда вы печатаете его, он вызывает 'toString()'. Если вы не вызовете другие методы явно, они не будут вызваны. – resueman

ответ

0

Как указано вы только определены эти метода. Вы никогда не вызываете ни один из методов, которые устанавливают эти значения, поэтому все они все еще находятся в исходном состоянии. Попробуйте добавить следующее к конструктору после установки n;

nextPrime(n); 
nextFibonaccitNumber(n); 
nextPowerof2(n); 
Смежные вопросы