BlazeXenon
BlazeXenon

Reputation: 40

Weird division by zero error

Well, im trying to calculate slope of a line, and naturally, when a point becomes undefined is when you try to divide by zero. Well I handle this in a try catch and but still getting a division by zero error, but in a rather... unexpected spot...

Here is the code:

private void tmrEnemyMovement_Tick(object sender, EventArgs e) {
        for (int i = 0; i < enemies.Count; i++) {
            int eneX = enemies[i].GetEnemyWorldPosX();
            int eneY = enemies[i].GetEnemyWorldPosY();
            int playerX = player.GetPlayerWorldPosX();
            int playerY = player.GetPlayerWorldPosY();

            double slope = -100000000;
            try {
                slope = (GetDistanceBetween(eneY, playerY)) / (GetDistanceBetween(eneX, playerX));
            } catch (DivideByZeroException) {//Division by Zero Exception is handled here.
                slope = GetDistanceBetween(eneY, playerY) / 1;
            }

            int multiplicative = 1;

            int rise = 1;//Convert.ToInt32(slope * multiplicative);
            int run = multiplicative;
            Text = Convert.ToSingle(slope) + "";

            if (enemies[i].GetEnemyWorldPosX() < player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() > player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 2
                enemies[i].MoveEnemyTo(run, rise, "+-");
            } else if (enemies[i].GetEnemyWorldPosX() < player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() < player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 3
                enemies[i].MoveEnemyTo(run, rise, "+-");
            } else if (enemies[i].GetEnemyWorldPosX() > player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() > player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 1
                enemies[i].MoveEnemyTo(run, rise, "-+");
            } else if (enemies[i].GetEnemyWorldPosX() > player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() < player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 4
                enemies[i].MoveEnemyTo(run, rise, "--");
            }
        }
        Bitmap bmp = map.GetMap() as Bitmap;

        using (Graphics drawEnemy = Graphics.FromImage(bmp)) {
            for (int i = 0; i < enemies.Count; i++) {
                drawEnemy.DrawImage(enemies[i].getSprite(), new PointF(enemies[i].GetEnemyWorldPosX(), enemies[i].GetEnemyWorldPosY()));
            }
        }
    }

And for some strange reason, I get this in a weird spot which doesnt really help me: picture

This method is defined as follows:

private int WorldPositionY = 0;

public int GetEnemyWorldPosY() {
    return WorldPositionY;
}

As you can see, its a simple getter, so why am I getting a division by zero error #1 at all, when it is handled in a try catch, and #2 on this line? Have I missed something?

**EDIT: ** Here is the stack trace: enter image description here

Upvotes: 0

Views: 324

Answers (1)

Artem
Artem

Reputation: 1575

Try to recompile your program and ensure you are in Debug mode. Also do not use try/catch for calculating slope - this satement is very long. Use

var distanceX = GetDistanceBetween(eneX, playerX);
if (distanceX != 0)
    slope = GetDistanceBetween(eneY, playerY) / distanceX;
else
    slope = GetDistanceBetween(eneY, playerY);

And this exception you caught is not critical. You can press Continue and go on. Or you can switch off handled exceptions (uncheck user-handled in Debug->Exceptions->Common Language Runtime). Or you can run your program without attached debugger (use Ctrl+F5).

Upvotes: 4

Related Questions