我正在使用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);
}
}
几个问题......
为什么代码以当前形式编译?
有没有办法编写代码,这样我就不必使用"字符串消息"参数?我查看的所有示例都使用字符串参数,但我并不是真的想要或需要它。
有没有办法编写代码,以便我不必创建自己的自定义异常类?换句话说,我可以抛出一般错误吗?我查看的所有示例都创建了自己的自定义异常,但我不需要那么详细的信息。
谢谢!
答案 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块的流程
尝试,
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