当程序运行出现以外的情形时,系统将自动生成一个Exception对象来通知程序,从而实现“业务功能实现代码”和“错误处理代码”分类,提供更好的可读性。

为了将“错误处理代码”从“业务实现代码”中分离出来,考虑下面的伪代码:

1 if(一切正常)
2 {
3      //业务实现代码  
4 }
5 else
6 {
7     alert 输入不合法
8     goto retry
9 }

 java提出了一种假设:如果程序可以顺利完成,那么”一切正常”,把系统的业务实现代码放在try块中定义,所有异常处理逻辑放在catch块中处理。下面是Java异常处理机制的语法结构:

1 try
2 {
3     //业务实现代码
4 }
5 catch(Exception e)//捕获(catch)异常
6 {
7     alert 输入不合法
8     goto retry
9 }

  如果执行try块里的业务代码时出现异常,系统将会自动生成一个异常对象,该异常对象被提交给Java运行环境,这个过程被称为抛出(throw)异常

  当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则把该异常对象将给catch块处理,这个过程被称为捕获(catch)异常;如果Java运行时环境找不到捕获异常的catch块,则运行环境终止,Java程序也将退出。

 1 import java.io.*;
 2 public class Gobang
 3 {
 4     // 定义一个二维数组来充当棋盘
 5     private String[][] board;
 6     // 定义棋盘的大小
 7     private static int BOARD_SIZE = 15;
 8     public void initBoard()
 9     {
10         // 初始化棋盘数组
11         board = new String[BOARD_SIZE][BOARD_SIZE];
12         // 把每个元素赋为"╋",用于在控制台画出棋盘
13         for (var i = 0; i < BOARD_SIZE; i++)
14         {
15             for (var j = 0; j < BOARD_SIZE; j++)
16             {
17                 board[i][j] = "╋";
18             }
19         }
20     }
21     // 在控制台输出棋盘的方法
22     public void printBoard()
23     {
24         // 打印每个数组元素
25         for (var i = 0; i < BOARD_SIZE; i++)
26         {
27             for (var j = 0; j < BOARD_SIZE; j++)
28             {
29                 // 打印数组元素后不换行
30                 System.out.print(board[i][j]);
31             }
32             // 每打印完一行数组元素后输出一个换行符
33             System.out.print("\n");
34         }
35     }
36     public static void main(String[] args) throws Exception
37     {
38         var gb = new Gobang();
39         gb.initBoard();
40         gb.printBoard();
41         // 这是用于获取键盘输入的方法
42         var br = new BufferedReader(
43             new InputStreamReader(System.in));
44         String inputStr = null;
45         // br.readLine():每当在键盘上输入一行内容按回车,
46         // 用户刚刚输入的内容将被br读取到。
47         while ((inputStr = br.readLine()) != null)
48         {
49             try
50             {
51                 // 将用户输入的字符串以逗号作为分隔符,分解成2个字符串
52                 String[] posStrArr = inputStr.split(",");
53                 // 将2个字符串转换成用户下棋的坐标
54                 var xPos = Integer.parseInt(posStrArr[0]);
55                 var yPos = Integer.parseInt(posStrArr[1]);
56                 // 把对应的数组元素赋为"●"。
57                 if (!gb.board[xPos - 1][yPos - 1].equals("╋"))
58                 {
59                     System.out.println("您输入的坐标点已有棋子了,"
60                         + "请重新输入");
61                     continue;
62                 }
63                 gb.board[xPos - 1][yPos - 1] = "●";
64             }
65             catch (Exception e)
66             {
67                 System.out.println("您输入的坐标不合法,请重新输入,"
68                     + "下棋坐标应以x,y的格式");
69                 continue;
70             }
71 
72             gb.printBoard();
73             System.out.println("请输入您下棋的坐标,应以x,y的格式:");
74         }
75     }
76 }
View Code

相关文章:

  • 2022-01-20
  • 2022-01-16
  • 2021-12-01
  • 2021-06-09
  • 2021-12-29
  • 2021-08-14
  • 2021-09-26
  • 2021-07-28
猜你喜欢
  • 2021-12-19
  • 2021-12-24
相关资源
相似解决方案