【软件工程基础实验】使用CheckStyle工具对生命游戏代码进行代码审查和修改

如题,采用的是Sun Checks规范,
最终将代码修改如下:

增加了package-info.java文件

Cell.java

package lifegame;/**Cell为细胞类,以实现数据封装和实现与细胞有关的方法.*/
public class Cell {/**长度.*/private int maxLength;/**宽度.*/private int maxWidth;/**当前代数.*/private int nowGeneration;/**一个数据代表一个细胞,0代表死,1代表活.*/private int[][] grid;/*** Cell类的构造函数.* @param maxLen 形参:长度* @param maxWid 形参:宽度* */public Cell(final int maxLen, final int maxWid) {maxLength = maxLen;maxWidth = maxWid;nowGeneration = 0;grid = new int[maxLen + 2][maxWid + 2];for (int i = 0; i <= maxLen + 1; i++) {for (int j = 0; j <= maxWid + 1; j++) {grid[i][j] = 0;}}}/*** 实现数据封装.* @param g 形参:细胞*/public void setGrid(final int[][] g) {grid = g;}/*** 实现数据封装.* @return 细胞*/public int[][] getGrid() {return grid;}/*** 实现数据封装.* @param nowGen 形参:当前代数*/public void setNowGeneration(final int nowGen) {nowGeneration = nowGen;}/*** 实现数据封装.* @return 当前代数*/public int getNowGeneration() {return nowGeneration;}/**随机初始化细胞.*/public void randomCell() {final double p = 0.5; //细胞随机初始化为活的概率for (int i = 1; i <= maxLength; i++) {for (int j = 1; j <= maxWidth; j++) {grid[i][j] = Math.random() > p ? 1 : 0;}}}/**细胞清零.*/public void deleteAllCell() {for (int i = 1; i <= maxLength; i++) {for (int j = 1; j <= maxWidth; j++) {grid[i][j] = 0;}}}/**繁衍.*/public void update() {int[][] newGrid = new int[maxLength + 2][maxWidth + 2];for (int i = 1; i <= maxLength; i++) {final int x = 3; //细胞为活的邻居数量for (int j = 1; j <= maxWidth; j++) {switch (getNeighborCount(i, j)) {case 2:newGrid[i][j] = grid[i][j]; //细胞状态保持不变break;case x:newGrid[i][j] = 1; // 细胞置为活break;default:newGrid[i][j] = 0; // 细胞置为死}}}for (int i = 1; i <= maxLength; i++) {for (int j = 1; j <= maxWidth; j++) {grid[i][j] = newGrid[i][j];}}nowGeneration++;}/*** 获取细胞的邻居数量.* @return 细胞邻居数量* @param i1  行* @param j1  列*/private int getNeighborCount(final int i1, final int j1) {int count = 0;for (int i = i1 - 1; i <= i1 + 1; i++) {for (int j = j1 - 1; j <= j1 + 1; j++) {count += grid[i][j]; //如果邻居还活着,邻居数便会+1}}count -= grid[i1][j1]; //每个细胞不是自己的邻居,则如果细胞还活着,邻居数-1.return count;}
}

GUI.java

package lifegame;import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;/**GUI为细胞类,以调用细胞类的方法和实现生命游戏过程的可视化.*/
public class GUI extends JFrame implements ActionListener {/**界面.*/private static GUI frame;/**细胞.*/private Cell cell;/**长和宽.*/private int maxLength, maxWidth;/**一个按钮表示一个细胞.*/private JButton[][] nGrid;/**按钮是否被选中.*/private boolean[][] isSelected;/**确定,当前代数,代数清零.*/private JButton ok, jbNowGeneration, randomInit, clearGeneration;/**下一代,开始繁衍,暂停,退出.*/private JButton clearCell, nextGeneration, start, stop, exit;/**长宽选择.*/private JComboBox lengthList, widthList;/**线程.*/private Thread thread;/**线程是否在运行.*/private boolean isRunning;/**细胞是否死亡.*/private boolean isDead;/*** 程序入口.* @param args 接收命令行参数*/public static void main(final String[] args) {frame = new GUI("生命游戏");}/*** 实现数据封装.* @return 宽度*/public int getMaxWidth() {return maxWidth;}/*** 实现数据封装.* @param maxWid 宽度*/public void setMaxWidth(final int maxWid) {this.maxWidth = maxWid;}/*** 实现数据封装.* @return 长度*/public int getMaxLength() {return maxLength;}/*** 实现数据封装.* @param maxLen 宽度*/public void setMaxLength(final int maxLen) {this.maxLength = maxLen;}/**初始化界面.*/public void initGUI() {final int wid = 20; //界面默认的宽度final int len = 35; //界面默认的长度if (maxWidth == 0) {maxWidth = wid;}if (maxLength == 0) {maxLength = len;}cell = new Cell(maxWidth, maxLength);JPanel backPanel, centerPanel, bottomPanel;JLabel jWidth, jLength, jNowGeneration;backPanel = new JPanel(new BorderLayout());centerPanel = new JPanel(new GridLayout(maxWidth, maxLength));bottomPanel = new JPanel();this.setContentPane(backPanel);backPanel.add(centerPanel, "Center");backPanel.add(bottomPanel, "South");nGrid = new JButton[maxWidth][maxLength];isSelected = new boolean[maxWidth][maxLength];for (int i = 0; i < maxWidth; i++) {for (int j = 0; j < maxLength; j++) {nGrid[i][j] = new JButton(""); //按钮内容置空以表示细胞nGrid[i][j].setBackground(Color.WHITE); //初始时所有细胞均为死centerPanel.add(nGrid[i][j]);}}final int minNum = 3; //长宽最小值final int maxNum = 100; //长宽最大值jLength = new JLabel("长度:");lengthList = new JComboBox();for (int i = minNum; i <= maxNum; i++) {lengthList.addItem(String.valueOf(i));}lengthList.setSelectedIndex(maxLength - minNum);jWidth = new JLabel("宽度:");widthList = new JComboBox();for (int i = minNum; i <= maxNum; i++) {widthList.addItem(String.valueOf(i));}widthList.setSelectedIndex(maxWidth - minNum);ok = new JButton("确定");jNowGeneration = new JLabel(" 当前代数:");//button按钮不能直接添加int,故采用此方式jbNowGeneration = new JButton("" + cell.getNowGeneration());jbNowGeneration.setEnabled(false);clearGeneration = new JButton("代数清零");randomInit = new JButton("随机初始化");clearCell = new JButton("细胞清零");start = new JButton("开始繁衍");nextGeneration = new JButton("下一代");stop = new JButton("暂停");exit = new JButton("退出");bottomPanel.add(jLength);bottomPanel.add(lengthList);bottomPanel.add(jWidth);bottomPanel.add(widthList);bottomPanel.add(ok);bottomPanel.add(jNowGeneration);bottomPanel.add(jbNowGeneration);bottomPanel.add(clearGeneration);bottomPanel.add(randomInit);bottomPanel.add(clearCell);bottomPanel.add(start);bottomPanel.add(nextGeneration);bottomPanel.add(stop);bottomPanel.add(exit);// 设置窗口final int length = 1000; //界面长度final int height = 650; //界面宽度this.setSize(length, height);this.setResizable(true);this.setLocationRelativeTo(null); // 让窗口在屏幕居中this.setVisible(true); // 将窗口设置为可见的// 注册监听器this.addWindowListener(new WindowAdapter() {public void windowClosed(final WindowEvent e) {System.exit(0);}});ok.addActionListener(this);clearGeneration.addActionListener(this);randomInit.addActionListener(this);clearCell.addActionListener(this);nextGeneration.addActionListener(this);start.addActionListener(this);stop.addActionListener(this);exit.addActionListener(this);for (int i = 0; i < maxWidth; i++) {for (int j = 0; j < maxLength; j++) {nGrid[i][j].addActionListener(this);}}}/*** 新建界面.* @param name  界面标题*/public GUI(final String name) {super(name);initGUI();}/*** 接收操作事件.* @param e 操作事件*/public void actionPerformed(final ActionEvent e) {final int minNum = 3; //长宽最小值final int sleeptime = 500; //线程睡眠的时间数if (e.getSource() == ok) { //确定frame.setMaxLength(lengthList.getSelectedIndex() + minNum);frame.setMaxWidth(widthList.getSelectedIndex() + minNum);initGUI();cell = new Cell(getMaxWidth(), getMaxLength());} else if (e.getSource() == clearGeneration) { //代数清零cell.setNowGeneration(0);jbNowGeneration.setText("" + cell.getNowGeneration()); //刷新当前代数isRunning = false;thread = null;} else if (e.getSource() == randomInit) { //随机初始化cell.randomCell();showCell();isRunning = false;thread = null;} else if (e.getSource() == clearCell) { //细胞清零cell.deleteAllCell();showCell();isRunning = false;thread = null;} else if (e.getSource() == start) { //开始isRunning = true;thread = new Thread(new Runnable() {public void run() {while (isRunning) {makeNextGeneration();try {Thread.sleep(sleeptime);} catch (InterruptedException e1) {e1.printStackTrace();}isDead = true;for (int row = 1; row <= maxWidth; row++) {for (int col = 1; col <= maxLength; col++) {if (cell.getGrid()[row][col] != 0) {isDead = false;break;}}if (!isDead) {break;}}if (isDead) {JOptionPane.showMessageDialog(null, "所有细胞已死亡");isRunning = false;thread = null;}}}});thread.start();} else if (e.getSource() == nextGeneration) { //下一代makeNextGeneration();isRunning = false;thread = null;} else if (e.getSource() == stop) { //暂停isRunning = false;thread = null;} else if (e.getSource() == exit) { //退出frame.dispose();System.exit(0);} else {int[][] grid = cell.getGrid();for (int i = 0; i < maxWidth; i++) {for (int j = 0; j < maxLength; j++) {if (e.getSource() == nGrid[i][j]) {isSelected[i][j] = !isSelected[i][j];if (isSelected[i][j]) {nGrid[i][j].setBackground(Color.BLACK);grid[i + 1][j + 1] = 1;} else {nGrid[i][j].setBackground(Color.WHITE);grid[i + 1][j + 1] = 0;}break;}}}cell.setGrid(grid);}}/**下一代.*/private void makeNextGeneration() {cell.update();showCell();jbNowGeneration.setText("" + cell.getNowGeneration()); //刷新当前代数}/**将细胞加载到界面上.*/public void showCell() {int[][] grid = cell.getGrid();for (int i = 0; i < maxWidth; i++) {for (int j = 0; j < maxLength; j++) {if (grid[i + 1][j + 1] == 1) {nGrid[i][j].setBackground(Color.BLACK); //活显示黑色} else {nGrid[i][j].setBackground(Color.WHITE); //死则显示白色}}}}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部