0

I wrote a perfect number program, but when I run it, it outputs that every number is perfect. Please help me find my mistake.

This is my server code:

public class Perfect
{
   private int number;

    public Perfect()
    {
        number = 0;
    }

    public Perfect(int num)
    {
        number = num;
    }

    public void setPerfect(int num)
    {
        number = num;
    }

    public boolean isPerfect()
    {
        int number = 0;
        int div = 0;
        int num = 1;
        while (num < number)
        {
            if (number % num == 0)
            {
                div += num;
            }
            num++;
        }

        if ( div == number)
            return true;

        else    
            return false;
    }

   public String toString()
    {
        if (isPerfect() == true)
          return number + " is perfect";
        else
          return number + " is not perfect";
    }
}

And the output I got was every number I typed in is perfect.

false
  • 10,264
  • 13
  • 101
  • 209

4 Answers4

4

in isPerfect you have defined a local variable number = 0. This is the value being tested instead of the field number. The local variable is hiding the class field.

John B
  • 32,493
  • 6
  • 77
  • 98
2

I think your problem is here:

public boolean isPerfect() {
    int number = 0;
    ...

You should probably be using the object's field number instead of shadowing it with a new variable initialized to zero.

kviiri
  • 3,282
  • 1
  • 21
  • 30
1

The line int number = 0; inside the isPerfect function is the cause of your trouble.

abiessu
  • 1,907
  • 1
  • 18
  • 16
0

You have

int number = 0;
int num = 1;
while (num < number)
{
...
}

which tests for

while (1 < 0)

So the loop never runs. Next you have

int div = 0;
if ( div == number)

which tests for

if (0 == 0)
    return true;

Therefor every number is perfect.

Olaf Dietsche
  • 72,253
  • 8
  • 102
  • 198