尝试使用Java中的Throw Catch

时间:2014-03-31 07:44:58

标签: java try-catch

我正在使用Java中的Sudoku解算器作为该语言的有趣介绍。我的代码所做的一件事就是在尝试解决之前检查拼图是否可以解决。我认为最好使用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. 有没有办法编写代码,这样我就不必使用"字符串消息"参数?我查看的所有示例都使用字符串参数,但我并不是真的想要或需要它。

  3. 有没有办法编写代码,以便我不必创建自己的自定义异常类?换句话说,我可以抛出一般错误吗?我查看的所有示例都创建了自己的自定义异常,但我不需要那么详细的信息。

  4. 谢谢!

3 个答案:

答案 0 :(得分: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 :(得分:1)

下图显示了try catch块的流​​程

enter image description here

尝试,

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

答案 2 :(得分: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() );
    }
}

另外,请在编写投掷代码之前查看以下链接:Throwing exceptions in Java