私はJavaにかなり慣れていないので、例外とそれらをいつ使用する必要があるかについて頭を悩ませています。私はそれらをエラーチェックの形式として使用してきましたが、例外はユーザーエラーなど、プログラムの制御外のものにのみ使用する必要があると言っている人に出くわしました。
2 次元の特定の行について、xMin と xMax の間のすべての y 値を計算する関数があります。垂直線上の y のすべての値を計算することは不可能であるため、この関数は、線が垂直である場合に例外をスローします。2 つの y 値の間の点を見つける同等の関数もあり、線が水平である場合はエラーがスローされます。
findPointsInRangeOfX (int xMin, int xMax) throws LineIsVerticalException {
// check if line is vertical
// if vertical, throw an exception
// else calculate the y values for each integer between xMin and xMax
// return y values
}
この関数は、x と y の最小値と最大値で指定されたウィンドウ内のライン上のすべてのポイントを見つけることの一部として呼び出します。この関数では、線が垂直かどうかはチェックしません。代わりに、findPointsInRangeOfX でのチェックに依存し、メソッドの周囲で try および catch ブロックを使用します。
pointsInWindow (int xMin, int xMax, int yMin, int yMax) {
try {
// Find list of all the points between xMin and xMax.
// Remove from list all points not between yMin and yMax
}
catch (LineIsVerticalException e) {
// If line is vertical, cannot find points between xMin and xMax
try {
// Instead, find list of all points between yMin and yMax
// Remove from list all points not between xMin and xMax
}
catch (LineIsHorizontalException e) {
// This part will never be reached because the line is vertical
// But the compiler complains if the exception isn't caught
}
}
}
これでよろしいですか?私はそのようなエラーの例外をスローしていません-垂直線を持っても問題はありません-しかし、それを使用して、x 値ではなく y 値の間のポイントを見つける必要があることを pointsInWindow に伝えています。try catch ブロックを使用するのではなく、pointsInWindow 関数で線が垂直かどうかを確認するチェックを複製する必要がありますか? チェックを複製した場合、LineIsVerticalException をまとめて削除する必要がありますか?