C# 零误差除法
我想计算一条直线的斜率,很自然,当一个点未定义时,就是你们试图除以零。好吧,我用一个try-catch来处理这个问题,但是仍然得到一个零除错误,但是在一个相当。。。意外地点 代码如下:C# 零误差除法,c#,exception,C#,Exception,我想计算一条直线的斜率,很自然,当一个点未定义时,就是你们试图除以零。好吧,我用一个try-catch来处理这个问题,但是仍然得到一个零除错误,但是在一个相当。。。意外地点 代码如下: private void tmrEnemyMovement_Tick(object sender, EventArgs e) { for (int i = 0; i < enemies.Count; i++) { int eneX = enemies[i].GetEn
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()));
}
}
}
正如您所看到的,这是一个简单的getter,那么,当在try-catch中处理它时,为什么我得到的除法是零错误#1,而在这一行中是#2?
我错过什么了吗
**编辑:**
以下是堆栈跟踪:
尝试重新编译程序并确保处于调试模式。也不要使用try/catch计算坡度-此状态非常长。使用
var distanceX = GetDistanceBetween(eneX, playerX);
if (distanceX != 0)
slope = GetDistanceBetween(eneY, playerY) / distanceX;
else
slope = GetDistanceBetween(eneY, playerY);
你抓到的这个例外并不重要。您可以按Continue继续。或者您可以关闭已处理的异常(在调试->异常->公共语言运行时中取消选中用户已处理)。或者,您可以在没有附加调试程序的情况下运行程序(使用Ctrl+F5)。尝试重新编译您的程序,并确保您处于调试模式。也不要使用try/catch计算坡度-此状态非常长。使用
var distanceX = GetDistanceBetween(eneX, playerX);
if (distanceX != 0)
slope = GetDistanceBetween(eneY, playerY) / distanceX;
else
slope = GetDistanceBetween(eneY, playerY);
你抓到的这个例外并不重要。您可以按Continue继续。或者您可以关闭已处理的异常(在调试->异常->公共语言运行时中取消选中用户已处理)。或者,您可以在没有附加调试器的情况下运行程序(使用Ctrl+F5)。是否禁用了优化?当前,我正在调试模式下运行此程序。能否显示完整的堆栈跟踪?是的,请稍候,让我获取该跟踪并用它更新日志。好的,我已更新日志。是否禁用了优化?当前,我正在调试模式下运行此程序。你能显示完整的堆栈跟踪吗?是的,等一秒钟,让我获取它并用它更新帖子。好的,我已经更新了帖子。嗯,出于一些奇怪的原因,我的try-catch不起作用,但是if-else语句起作用了。。。。有点奇怪,但无论如何谢谢你的帮助!好吧,出于某种奇怪的原因,我的try-catch不起作用,但是if-else语句起作用了。。。。有点奇怪,但无论如何谢谢你的帮助!