• 实用---生命游戏 Java


    本程序由四个类组成:

    其中Init_data,用于初始化各个活细胞的状态
    judge_state,用于判断下一代的细胞状态,并进行更新。
    set_color,用于给GUI界面中各个细胞涂色
    set_frame,用于设置GUI界面的布局
      1 /*初始化细胞状态类
      2  * 四个模式
      3  * 1、easy模式,一个大写的I
      4  * 2、love模式,一个大写的LOVE
      5  * 3、arrow模式,一个粗箭头
      6  * 4、random模式,根据随机函数生成活细胞数
      7  */
      8 package game_life_self;
      9 
     10 import java.util.Random;
     11 
     12 public class Init_data{
     13     static boolean[][] state;
     14     static int rand;
     15     public Init_data(boolean[][] state_one)
     16     {
     17         state = state_one;
     18     }
     19 
     20     public void init_one()
     21     {
     22         for(int i=1;i<state.length;i++)
     23         {
     24             for(int j=1;j<state[i].length-1;j++)
     25             {
     26                 state[i][j] = false;
     27             }
     28         }
     29         
     30         //LOVE
     31         //L
     32         state[9][3] = true;
     33         state[10][3] = true;
     34         state[11][3] = true;
     35         state[12][3] = true;
     36         state[13][3] = true;
     37         state[14][3] = true;
     38         state[14][4] = true;
     39         state[14][5] = true;
     40 
     41         //O
     42         state[9][8] = true;
     43         state[10][7] = true;
     44         state[11][7] = true;
     45         state[12][7] = true;
     46         state[13][7] = true;
     47         state[14][8] = true;
     48         state[10][9] = true;
     49         state[11][9] = true;
     50         state[12][9] = true;
     51         state[13][9] = true;
     52         
     53         //V
     54         state[9][11] = true;
     55         state[10][12] = true;
     56         state[11][13] = true;
     57         state[12][14] = true;
     58         state[13][15] = true;
     59         state[14][16] = true;
     60         state[13][17] = true;
     61         state[12][18] = true;
     62         state[11][19] = true;
     63         state[10][20] = true;
     64         state[9][21] = true;
     65         
     66         
     67         //E
     68         state[9][23] = true;
     69         state[9][24] = true;
     70         state[9][25] = true;
     71         state[9][26] = true;
     72         state[10][23] = true;
     73         state[11][23] = true;
     74         state[12][23] = true;
     75         state[12][24] = true;
     76         state[12][25] = true;
     77         state[12][26] = true;
     78         state[13][23] = true;
     79         state[14][23] = true;
     80         state[15][23] = true;
     81         state[15][24] = true;
     82         state[15][25] = true;
     83         state[15][26] = true;
     84         
     85     
     86     }
     87     
     88     public void init_two()
     89     {
     90         for(int i=1;i<state.length;i++)
     91         {
     92             for(int j=1;j<state[i].length-1;j++)
     93             {
     94                 state[i][j] = false;
     95             }
     96         }
     97 
     98         state[23][3] = true;
     99         state[23][4] = true;
    100         state[23][5] = true;
    101         state[22][3] = true;
    102         state[22][4] = true;
    103         state[22][5] = true;
    104         state[21][3] = true;
    105         state[21][4] = true;
    106         state[21][5] = true;
    107         state[20][3] = true;
    108         state[20][4] = true;
    109         state[20][5] = true;
    110         state[19][3] = true;
    111         state[19][4] = true;
    112         state[19][5] = true;
    113         state[18][3] = true;
    114         state[18][4] = true;
    115         state[18][5] = true;
    116         state[17][3] = true;
    117         state[17][4] = true;
    118         state[17][5] = true;
    119         state[16][3] = true;
    120         state[16][4] = true;
    121         state[16][5] = true;
    122         
    123         
    124         
    125         state[16][6] = true;
    126         state[16][7] = true;
    127         state[16][8] = true;
    128         state[16][9] = true;
    129         state[16][10] = true;
    130         state[16][11] = true;
    131         state[16][12] = true;
    132         state[16][13] = true;
    133         state[17][6] = true;
    134         state[17][7] = true;
    135         state[17][8] = true;
    136         state[17][9] = true;
    137         state[17][10] = true;
    138         state[17][11] = true;
    139         state[17][12] = true;
    140         state[17][13] = true;
    141         state[18][6] = true;
    142         state[18][7] = true;
    143         state[18][8] = true;
    144         state[18][9] = true;
    145         state[18][10] = true;
    146         state[18][11] = true;
    147         state[18][12] = true;
    148         state[18][13] = true;
    149         
    150         state[15][9] = true;
    151         state[14][9] = true;
    152         state[13][9] = true;
    153         state[12][9] = true;
    154         state[11][9] = true;
    155         state[10][9] = true;
    156         state[9][9] = true;
    157         state[9][8] = true;
    158         state[9][7] = true;
    159         state[9][6] = true;
    160         state[9][5] = true;
    161         
    162         state[15][10] = true;
    163         state[14][10] = true;
    164         state[13][10] = true;
    165         state[12][10] = true;
    166         state[11][10] = true;
    167         state[10][10] = true;
    168         state[9][10] = true;
    169 
    170         state[15][11] = true;
    171         state[14][11] = true;
    172         state[13][11] = true;
    173         state[12][11] = true;
    174         state[11][11] = true;
    175         state[10][11] = true;
    176         state[9][11] = true;
    177         
    178         state[15][12] = true;
    179         state[14][12] = true;
    180         state[13][12] = true;
    181         state[12][12] = true;
    182         state[11][12] = true;
    183         state[10][12] = true;
    184         state[9][12] = true;
    185         
    186         state[15][13] = true;
    187         state[14][13] = true;
    188         state[13][13] = true;
    189         state[12][13] = true;
    190         state[11][13] = true;
    191         state[10][13] = true;
    192         state[9][13] = true;
    193         state[9][14] = true;
    194         state[9][15] = true;
    195         state[9][16] = true;
    196         state[9][17] = true;
    197 
    198         state[3][11] = true;
    199         state[4][10] = true;state[4][11] = true;state[4][12] = true;
    200         state[5][9] = true;state[5][10] = true;state[5][11] = true;state[5][12] = true;state[5][13] = true;
    201         state[6][8] = true;state[6][9] = true;state[6][10] = true;state[6][11] = true;state[6][12] = true;state[6][13] = true;state[6][14] = true;
    202         state[7][7] = true;state[7][8] = true;state[7][9] = true;state[7][10] = true;state[7][11] = true;state[7][12] = true;state[7][13] = true;state[7][14] = true;state[7][15] = true;
    203         state[8][6] = true;state[8][7] = true;state[8][8] = true;state[8][9] = true;state[8][10] = true;state[8][11] = true;state[8][12] = true;state[8][13] = true;state[8][14] = true;state[8][15] = true;state[8][16] = true;
    204         
    205     }
    206     
    207     public void init_three()
    208     {
    209         for(int i=1;i<state.length;i++)
    210         {
    211             for(int j=1;j<state[i].length-1;j++)
    212             {
    213                 rand = (int) (Math.random()*100);
    214                 if (rand<50) {
    215                     state[i][j] = false;
    216                 }
    217                 else
    218                     state[i][j] = true;
    219             }
    220         }
    221     }
    222     public void init_zero()
    223     {
    224         for(int i=1;i<state.length;i++)
    225         {
    226             for(int j=1;j<state[i].length-1;j++)
    227             {
    228                 state[i][j] = false;
    229             }
    230         }
    231         state[9][3] = true;
    232         state[9][4] = true;
    233         state[9][6] = true;
    234         state[9][7] = true;
    235         state[9][5] = true;
    236         state[10][5] = true;
    237         state[11][5] = true;
    238         state[12][5] = true;
    239         state[13][5] = true;
    240         state[14][5] = true;
    241         state[14][4] = true;
    242         state[14][6] = true;
    243         state[14][3] = true;
    244         state[14][7] = true;
    245 
    246     }
    247 }



     1 /*主类
     2  * 生命游戏开始入口
     3  * editor:
     4  * 软件1501 刘辉
     5  * time:2017-9-7
     6  */
     7 
     8 package game_life_self;
     9 
    10 import javax.swing.Action;
    11 import javax.swing.JFrame;
    12 import javax.swing.JLabel;
    13 import javax.swing.JPanel;
    14 
    15 import java.awt.Color;
    16 import java.awt.GridLayout;
    17 import java.awt.Panel;
    18 import java.awt.Window;
    19 import java.awt.event.ActionEvent;
    20 import java.awt.event.ActionListener;
    21 
    22 import javax.swing.JMenuBar;
    23 import javax.swing.JMenu;
    24 import javax.swing.JMenuItem;
    25 import javax.swing.JOptionPane;
    26 
    27 public class start_frame extends Thread{
    28     static start_frame start;
    29     static Init_data init_data;
    30     static judge_state judge;
    31     static set_color set_color;
    32     static set_frame frame;
    33     //存放细胞状态
    34     static boolean[][] state_one;
    35     static JPanel[][] jPanel;
    36     //初始化GUI界面
    37     public start_frame(int row,int col)
    38     {
    39         state_one = new boolean[row][col];
    40         frame = new set_frame(row,col);
    41         jPanel = frame.jPanel;
    42     }
    43     
    44     //主函数
    45     public static void main(String[] args)
    46     {
    47         //创建游戏对象
    48             start = new start_frame(30,30);
    49             init_data = new Init_data(state_one);
    50             judge = new judge_state(state_one, jPanel);
    51             set_color = new set_color(state_one, jPanel);
    52     }
    53 }
     1 /*判断状态类
     2  * 算法:
     3  * 根据游戏规则判断中心细胞的下一步演化规则,并将状态计入state_one[][]中。
     4  * nCount:周围活细胞的个数
     5  */
     6 
     7 
     8 package game_life_self;
     9 
    10 import java.awt.Color;
    11 
    12 import javax.swing.JPanel;
    13 
    14 public class judge_state {
    15     static boolean [][] state_one;
    16     JPanel[][] jPanel;
    17     //初始化类
    18     public judge_state(boolean [][] state,JPanel[][] jpanel_one)
    19     {
    20         state_one = state;
    21         jPanel = jpanel_one;
    22     }
    23     
    24     //判断中心生命的状态并更新
    25     public void judge() {
    26     int life = 0;
    27         for (int i = 1; i < state_one.length - 1; i++) {
    28             for (int j = 1; j < state_one[i].length - 1; j++) {
    29                 //循环判断中心生命周围的各个点的状态
    30                 int nCount = 0;
    31                 if (jPanel[i - 1][j - 1].getBackground() == Color.black) {
    32                     nCount++;
    33                 }
    34                 if (jPanel[i - 1][j].getBackground() == Color.black) {
    35                     nCount++;
    36                 }
    37                 if (jPanel[i - 1][j + 1].getBackground() == Color.black) {
    38                     nCount++;
    39                 }
    40                 if (jPanel[i][j - 1].getBackground() == Color.black) {
    41                     nCount++;
    42                 }
    43                 if (jPanel[i][j + 1].getBackground() == Color.black) {
    44                     nCount++;
    45                 }
    46                 if (jPanel[i + 1][j - 1].getBackground() == Color.black) {
    47                     nCount++;
    48                 }
    49                 if (jPanel[i + 1][j].getBackground() == Color.black) {
    50                     nCount++;
    51                 }
    52                 if (jPanel[i + 1][j + 1].getBackground() == Color.black) {
    53                     nCount++;
    54                 }
    55                 if (nCount==3) {
    56                     state_one[i][j] = true;
    57                 }
    58                 else if (nCount == 2) {
    59                     state_one[i][j] = state_one[i][j];
    60                 }
    61                 else 
    62                     state_one[i][j] = false;
    63                 
    64                 
    65         }
    66     }
    67     }
    68 }
     1 /*涂色类
     2  * 根据state[][]中各个表格的状态进行涂色
     3  * 底色为白色,活跃生命为黑色
     4  */
     5 
     6 
     7 package game_life_self;
     8 
     9 import java.awt.Color;
    10 
    11 import javax.swing.JPanel;
    12 
    13 public class set_color {
    14     static boolean [][] state_one;
    15     static JPanel[][] jPanel;
    16     //初始化类
    17     public set_color(boolean [][] state,JPanel[][] jpanel_one)
    18     {
    19         state_one = state;
    20         jPanel = jpanel_one;
    21     }
    22     //设置颜色
    23     public static void paint()
    24     {
    25             
    26         //循环判断状态设置颜色
    27         for(int i=1;i<state_one.length;i++)
    28         {
    29             for(int j=1;j<state_one[i].length-1;j++)
    30             {
    31                 if (state_one[i][j]) {
    32                 jPanel[i][j].setBackground(Color.black);
    33                 }
    34                 else{
    35                     jPanel[i][j].setBackground(Color.white);
    36                 }
    37             }
    38         }
    39     }
    40 }
      1 /*****************
      2  * 构建窗口类
      3  * 菜单choice(控制):1、开始 2、继续 3、结束
      4  * 菜单pattern(模式):1、easy 2、love型 3、arrow箭头型 4、随机模式
      5  * 菜单speed(速度):1、100 2、1000 3、5000
      6  * 菜单help(帮助):1、abstract(游戏规则介绍)2、editor(制作者)
      7  * 红色栏:1、Number of remaining lives(剩余生命个数)2、step:生命演化步数
      8  * 表格栏 30*30
      9  */
     10 
     11 package game_life_self;
     12 
     13 import java.awt.BorderLayout;
     14 import java.awt.Color;
     15 import java.awt.GridLayout;
     16 import java.awt.event.ActionEvent;
     17 import java.awt.event.ActionListener;
     18 import java.util.regex.Pattern;
     19 
     20 import javax.swing.JFrame;
     21 import javax.swing.JMenu;
     22 import javax.swing.JMenuBar;
     23 import javax.swing.JMenuItem;
     24 import javax.swing.JOptionPane;
     25 import javax.swing.JPanel;
     26 import javax.swing.JLabel;
     27 import java.awt.FlowLayout;
     28 
     29 public class set_frame {
     30     JFrame iFrame;
     31     //游戏迭代速度
     32     static int speed = 1000;
     33     //剩余生命个数
     34     static int life = 0;
     35     //演化步数
     36     static int step_one = 0;
     37     myThread thread = null;
     38     static start_frame start_frame;
     39     //显示细胞状态面板
     40     static JPanel[][] jPanel;
     41     //模式一(love)
     42     static int pattern = 1;
     43     //显示生命个数面板
     44     static JPanel panel_1;
     45     static JLabel number;
     46     static JLabel step;
     47     static boolean end = true;
     48     public set_frame (int row ,int col) {
     49         //建立窗口
     50         iFrame = new JFrame("the game of life");
     51         //初始化边界
     52         jPanel = new JPanel[row][col];
     53         iFrame.getContentPane().setLayout(new BorderLayout(0, 0));
     54         
     55         JPanel panel = new JPanel();
     56         iFrame.getContentPane().add(panel, BorderLayout.NORTH);
     57         panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
     58         
     59         number = new JLabel("Number of remaining lives: "+life+"               ");
     60         panel.add(number);
     61         
     62         step = new JLabel("step: "+step_one);
     63         panel.add(step);
     64 
     65         panel.setBackground(Color.red);
     66         panel_1 = new JPanel();
     67         iFrame.getContentPane().add(panel_1, BorderLayout.CENTER);
     68         panel_1.setLayout(new GridLayout(30, 30, 2, 2));
     69         //初始化所有界面为白色
     70         for(int i=0;i<row;i++)
     71         {
     72             for(int j=0;j<col;j++)
     73             {
     74                 jPanel[i][j] = new JPanel();
     75                 jPanel[i][j].setBackground(Color.white);
     76                 panel_1.add(jPanel[i][j]);
     77             }
     78         }
     79         
     80         //设置图形界面大小
     81         iFrame.setLocation(450, 180);
     82         iFrame.setSize(500, 500);        
     83         
     84         JMenuBar menuBar = new JMenuBar();
     85         iFrame.setJMenuBar(menuBar);
     86         
     87         JMenu choice = new JMenu("choice");
     88         menuBar.add(choice);
     89         
     90         JMenuItem start = new JMenuItem("start");
     91         choice.add(start);
     92         start.addActionListener(new start());
     93         
     94         JMenuItem continue_one = new JMenuItem("continue");
     95         choice.add(continue_one);
     96         continue_one.addActionListener(new continue_one());
     97         
     98         
     99         JMenuItem stop = new JMenuItem("stop");
    100         choice.add(stop);
    101         stop.addActionListener(new stop());
    102         
    103         JMenu pattern = new JMenu("pattern");
    104         menuBar.add(pattern);
    105         
    106         JMenuItem easy = new JMenuItem("easy");
    107         pattern.add(easy);
    108         easy.addActionListener(new easy());
    109         
    110         JMenuItem love = new JMenuItem("love");
    111         pattern.add(love);
    112         love.addActionListener(new love());
    113         
    114         JMenuItem arrow = new JMenuItem("arrow");
    115         pattern.add(arrow);
    116         arrow.addActionListener(new arrow());
    117         
    118         JMenuItem random = new JMenuItem("random");
    119         pattern.add(random);
    120         random.addActionListener(new random());
    121         
    122         
    123         JMenu speed = new JMenu("speed");
    124         menuBar.add(speed);
    125         
    126         JMenuItem speed_fast = new JMenuItem("100");
    127         speed.add(speed_fast);
    128         speed_fast.addActionListener(new speed_fast());
    129         
    130         JMenuItem speed_middle = new JMenuItem("1000");
    131         speed.add(speed_middle);
    132         speed_middle.addActionListener(new speed_middle());
    133         
    134         JMenuItem speed_low = new JMenuItem("5000");
    135         speed.add(speed_low);
    136         speed_low.addActionListener(new speed_low());
    137         
    138         JMenu help = new JMenu("help");
    139         menuBar.add(help);
    140         
    141         JMenuItem rule = new JMenuItem("abstract");
    142         help.add(rule);
    143         rule.addActionListener(new rule());
    144         
    145         JMenuItem editor = new JMenuItem("editor");
    146         help.add(editor);
    147         editor.addActionListener(new editor());
    148         
    149         iFrame.setVisible(true);
    150         
    151     }
    152     
    153     class myThread extends Thread{
    154         public myThread()    {    
    155         }
    156         public void run(){
    157             while(end)
    158             {
    159                 life = 0;
    160                 start_frame.judge.judge();
    161                 try {
    162                     sleep(speed);
    163                 } catch (InterruptedException e) {
    164                     // TODO Auto-generated catch block
    165                     e.printStackTrace();
    166                 }
    167                 
    168                 for (int m = 1; m < start_frame.state_one.length - 1; m++)
    169                 {
    170                     for (int n = 1; n < start_frame.state_one[m].length - 1; n++) 
    171                     {
    172                         if (start_frame.state_one[m][n]==true) {
    173                             life ++;
    174                         }
    175                     }
    176                 }
    177                 step_one++;
    178                 number.setText("Number of remaining lives: "+life+"               ");
    179                 step.setText("step: "+step_one);
    180                 
    181                 start_frame.set_color.paint();
    182                 
    183                 if (life==0) {
    184                     end = false;
    185                     JOptionPane.showMessageDialog(null, "生命演化结束:
    "
    186                             + "        所用步数为"+step_one);
    187                 }
    188                 
    189             }
    190         }
    191     }
    192     
    193         //控制游戏的开始
    194         class start implements ActionListener
    195         {
    196             @Override
    197             public void actionPerformed(ActionEvent e) {
    198                 // TODO Auto-generated method stub
    199                 //初始化逻辑地图
    200                 if (pattern==1) {
    201                     start_frame.init_data.init_one();
    202                 }else if (pattern==2) {
    203                     start_frame.init_data.init_two();
    204                 }else if (pattern==3) {
    205 
    206                     start_frame.init_data.init_three();
    207                 }else {
    208                     start_frame.init_data.init_zero();
    209                 }
    210                 //更新地图颜色
    211                 start_frame.set_color.paint();
    212                 //初始化步数和剩余生命个数
    213                 life = 0;
    214                 step_one = 0;
    215                 end = true;
    216                 //控制线程的开断
    217                 if (thread != null)  
    218                     thread.stop();  
    219                 thread = new myThread();  
    220                 thread.start();  
    221             }
    222         }
    223         //控制游戏的继续
    224         class continue_one implements ActionListener
    225         {
    226 
    227             @Override
    228             public void actionPerformed(ActionEvent e) {
    229                 // TODO Auto-generated method stub
    230                 if(thread!=null)
    231                     thread.stop();
    232                 thread = new myThread();
    233                 thread.start();
    234             }
    235             
    236         }
    237         //控制游戏的停止
    238         class stop implements ActionListener
    239         {
    240             @Override
    241             public void actionPerformed(ActionEvent e) {
    242                 // TODO Auto-generated method stub
    243                 //控制线程的开断
    244                 if (thread != null)  
    245                     thread.stop();  
    246                 thread = null;  
    247             }
    248             
    249         }
    250         //设置生命迭代速度(快速)
    251         class speed_fast implements ActionListener
    252         {
    253             @Override
    254             public void actionPerformed(ActionEvent e) {
    255                 // TODO Auto-generated method stub
    256                 speed = 100;
    257             }
    258         }
    259         //设置生命迭代速度(中速)
    260         class speed_middle implements ActionListener
    261         {
    262             @Override
    263             public void actionPerformed(ActionEvent e) {
    264                 // TODO Auto-generated method stub
    265                 speed = 1000;
    266             }
    267         }
    268         //设置生命迭代速度(慢速)
    269         class speed_low implements ActionListener
    270         {
    271             @Override
    272             public void actionPerformed(ActionEvent e) {
    273                 // TODO Auto-generated method stub
    274                 speed = 5000;
    275             }
    276         }
    277         //游戏规则介绍
    278         class rule implements ActionListener
    279         {
    280             @Override
    281             public void actionPerformed(ActionEvent e) {
    282                 // TODO Auto-generated method stub
    283                 JOptionPane.showMessageDialog(null, "                                                                                                                       The rules of the life game 
    "
    284                         + "Each cell's life and death follows the following principles: 
    "
    285                         + "      One: If a cell has three living cells (a total of eight cells around a cell), then the living cells (i.e. if the cells had to die, then born into, if for a living, original is unchanged). 
    "
    286                         + "      Two: If two cells live around a cell, the cell's life and death status remains unchanged.)
    "
    287                         + "      Three: In other cases, the cell is dead (that is, if the cell had previously lived, it would have died and if it had been dead, it would remain the same)
    "+"
    ");
    288             }
    289         }
    290         //程序编者
    291         class editor implements ActionListener
    292         {
    293 
    294             @Override
    295             public void actionPerformed(ActionEvent e) {
    296                 // TODO Auto-generated method stub
    297                 JOptionPane.showMessageDialog(null, "this game's editor:
    "
    298                         + "       The software 1501 class(软件1501班)     LiuHui(刘辉) 
    ");
    299             }
    300         }
    301         //模式中 love型
    302         class love implements ActionListener
    303         {
    304             @Override
    305             public void actionPerformed(ActionEvent e) {
    306                 // TODO Auto-generated method stub
    307                 pattern = 1;
    308             }
    309             
    310         }
    311         //模式中 箭头型
    312         class arrow implements ActionListener
    313         {
    314 
    315             @Override
    316             public void actionPerformed(ActionEvent e) {
    317                 // TODO Auto-generated method stub
    318                 pattern = 2;
    319             }
    320             
    321         }
    322         //随机模式
    323         class random implements ActionListener
    324         {
    325 
    326             @Override
    327             public void actionPerformed(ActionEvent e) {
    328                 // TODO Auto-generated method stub
    329                 pattern = 3;
    330             }
    331             
    332         }
    333         //随机模式
    334                 class easy implements ActionListener
    335                 {
    336 
    337                     @Override
    338                     public void actionPerformed(ActionEvent e) {
    339                         // TODO Auto-generated method stub
    340                         pattern = 0;
    341                     }
    342                     
    343                 }
    344 }
    
    
    
     

    程序运行结果:

    2.1  I型细胞模型

    初始I型的细胞状态:

    细胞演化后的结果为:

     

    从图中可以看出在演化5步后,细胞的剩余数为0,演化完毕。

    2.2  LOVE细胞模型

    初始LOVE型的细胞状态:

     

    细胞演化后的结果为:

     

    从图中可以看出在演化131步后,细胞的剩余数为11,保持恒定不变的状态,自此演化完毕。

    2.3 箭头型细胞模型

    初始箭头细胞的状态:

     

    细胞演化后的结果为:

     

    从图中可以看出在演化151步后,细胞的剩余数为15,保持恒定不变的状态,自此演化完毕。

    2.4 随机细胞模型

    初始随机细胞状态:

     

    细胞演化后的结果为:

    从图中可以看出在演化520步后,细胞的剩余数为22,保持恒定不变的状态,自此演化完毕。

  • 相关阅读:
    22. Generate Parentheses
    21. Merge Two Sorted Lists
    20. Valid Parentheses
    19. Remove Nth Node From End of List
    18. 4Sum
    JDK7新特性
    类Enum
    装饰设计模式
    模板设计模式
    反射
  • 原文地址:https://www.cnblogs.com/liuhui5599/p/7497398.html
Copyright © 2020-2023  润新知