Попробуйте бросить Catch в Java

1

Я работаю над решением 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);
    }
}

Пара вопросов...

  1. Почему код не будет компилироваться в его текущей форме?

  2. Есть ли способ написать код, так что мне не нужно использовать параметр "String message"? Все примеры, на которые я смотрел, используют параметр строки, но я действительно не хочу этого или не нуждаюсь в нем.

  3. Есть ли способ написать код, так что мне не нужно создавать собственный собственный класс исключений? Другими словами, могу ли я просто выбросить общую ошибку? Все примеры, на которые я смотрел, создали свое собственное исключение, но мне не нужен этот уровень детализации.

Благодарю!

  • 1
    Классы должны быть названы с первой буквы в верхнем регистре, поэтому вместо IllegalPuzzle нелегально.
Теги:
try-catch

3 ответа

2
Лучший ответ

Ответ 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 также отвечает на эту часть.

1

Следующий рисунок показывает, что поток блока catch try

Изображение 174551

попробуйте,

try{
      throw new Exception("IllegalPuzzleException");
}catch (Exception e){
     System.out.println(e.getMessage());
}
0

Попробуйте указать конкретное исключение для исключения незаконных головоломок и уловить другие Исключения в другом блоке кода, которые могут быть выбраны другой частью кода.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню