Я работаю над решением Sudoku на Java, как интересное введение в язык. Одна из вещей, которые у меня есть в моем коде, - проверить, разрешена ли головоломка, прежде чем она попытается ее решить. Я подумал, что было бы неплохо использовать try{}
catch{}
для этого, но я не могу получить код для компиляции.
public class SudokuSolver2
{
public static void main(String[] args) {
// 9x9 integer array with currentPuzzle
// check current puzzle and make sure it is a legal puzzle, else throw "illegal puzzle" error
try
{
// 1) check each row and make sure there is only 1 number per row
// 2) check each column and make sure there is only 1 number per column
// 3) check each square and make sure there is only 1 number per square
throw new illegalPuzzle("");
}
catch ( illegalPuzzle(String e) )
{
System.out.println("Illegal puzzle.");
System.exit(1);
}
}
}
public class illegalPuzzle extends Exception
{
public illegalPuzzle(String message)
{
super(message);
}
}
Пара вопросов...
Почему код не будет компилироваться в его текущей форме?
Есть ли способ написать код, так что мне не нужно использовать параметр "String message"? Все примеры, на которые я смотрел, используют параметр строки, но я действительно не хочу этого или не нуждаюсь в нем.
Есть ли способ написать код, так что мне не нужно создавать собственный собственный класс исключений? Другими словами, могу ли я просто выбросить общую ошибку? Все примеры, на которые я смотрел, создали свое собственное исключение, но мне не нужен этот уровень детализации.
Благодарю!
Ответ 1. Код не будет компилироваться в его текущей форме, потому что предложение catch должно быть записано следующим образом:
catch (illegalPuzzle e)
{
System.out.println("Illegal puzzle.");
System.exit(1);
}
Ответ 2. Просто бросьте Exception
(базовый класс всех Исключений) в своей попытке и полностью удалите класс illegalPuzzle
. Вот как:
public class SudokuSolver
{
public static void main(String[] args)
{
try
{
// other statements
throw new Exception();
}
catch (Exception e)
{
System.out.println("Illegal puzzle.");
System.exit(1);
}
}
}
Ответ 3. Ответ 2 также отвечает на эту часть.
Следующий рисунок показывает, что поток блока catch try
попробуйте,
try{
throw new Exception("IllegalPuzzleException");
}catch (Exception e){
System.out.println(e.getMessage());
}
Попробуйте указать конкретное исключение для исключения незаконных головоломок и уловить другие Исключения в другом блоке кода, которые могут быть выбраны другой частью кода.
public static void main(String args[]) {
try {
throw new IllegalPuzzle("Illegal Puzzle");
} catch ( IllegalPuzzle e ) {
System.out.println(e.getMessage());
System.exit(1);
} catch (Exception ex) {
System.out.println("Inside Exception: " + ex.getMessage() );
}
}
Также обратите внимание на ссылку ниже, прежде чем писать код броска: выброс исключений в Java