资源描述
测试09-01 540913110114 李枫
算法设计与分析实验报告
专 业: 测试技术09-01
学 号: 540913110114
姓 名: 李枫
指导老师: 宋胜利 李璞
一、实验目的与要求
1、理解算法的概念
2、实现棋盘化以及“L”型棋盘覆盖
二、实验流程:
1、编程任务:设计棋盘覆盖的一个简单算法
2、输入数据:输入棋盘大小,特殊方格的行号和列号
3、结果输出:将计算结果输出显示棋盘
三、实验代码:
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.*;
public class TestChessBoard {
// 变量定义部分
int title;
int x;
int y;// 特殊方格行列号
int Size;// 方格宽度
JLabel[][] cube;// 小方格数组
JPanel LabelPanel;
JTextField size;
JTextField xCount;
JTextField yCount;
JButton sumbit;
JFrame frame;
JLabel label1;
Color colors[] = { Color.green, Color.BLACK, Color.BLUE, Color.cyan,
Color.ORANGE, Color.PINK, Color.yellow };
int cColor = 0;// 用于colors数组计数
TestChessBoard() {
title = 0;
frame = new JFrame();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(3, 1));
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(3, 2));
label1 = new JLabel("棋盘方格宽度:", JLabel.CENTER);
label1.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
size = new JTextField("4");
JLabel label2 = new JLabel("请输入特殊方格横坐标:", JLabel.CENTER);
label2.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
xCount = new JTextField("0");
JLabel label3 = new JLabel("请输入棋盘方格纵坐标:", JLabel.CENTER);
label3.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
yCount = new JTextField("0");
buttonPanel.add(label1);
buttonPanel.add(size);
buttonPanel.add(label2);
buttonPanel.add(xCount);
buttonPanel.add(label3);
buttonPanel.add(yCount);
buttonPanel.setBorder(BorderFactory
.createBevelBorder(BevelBorder.LOWERED));
cube = new JLabel[20][20];
LabelPanel = new JPanel();
LabelPanel.setLayout(new GridLayout(4, 4));
LabelPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createLineBorder(Color.RED, 2), "棋盘", TitledBorder.CENTER,
TitledBorder.TOP));
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++) {
cube[i][j] = makelabel();
LabelPanel.add(cube[i][j]);
}
sumbit = new JButton("点击刷新确认棋盘");
JPanel sumbitPanel = new JPanel();
sumbitPanel.add(sumbit);
sumbitPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
contentPane.add(LabelPanel);
contentPane.add(buttonPanel);
contentPane.add(sumbitPanel);
sumbit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("点击刷新确认棋盘")) {
String str = new String();
str = xCount.getText();
x = Integer.parseInt(str);
str = yCount.getText();
y = Integer.parseInt(str);
str = size.getText();
Size = Integer.parseInt(str);
LabelPanel.removeAll();
// String str=new String();
str = size.getText();
Size = Integer.parseInt(str);
LabelPanel.setLayout(new GridLayout(Size, Size));
for (int i = 0; i < Size; i++)
for (int j = 0; j < Size; j++) {
if (i == x - 1 && j == y - 1) {
cube[i][j] = makelabel();
cube[i][j].setText("特殊");
} else
cube[i][j] = makelabel();
LabelPanel.add(cube[i][j]);
}
// cube[i-1][j-1]=makelabel();
// cube[i-1][j-1].setText("特殊");
// label1.setText(label1.getText()+"n"+"您输入的棋盘如上");
frame.pack();
frame.setBounds(new Rectangle(500, 200, 500, 400));
if (x > Size || y > Size || x <= 0 || y <= 0) {
int type = JOptionPane.ERROR_MESSAGE;
JOptionPane.showMessageDialog(frame, new String(
“您输入的特殊方格不合法,请确认后重新输入!”,
new String("Error"), type);
sumbit.setText("点击刷新确认棋盘");
} else {
xCount.setEditable(false);
size.setEditable(false);
yCount.setEditable(false);
sumbit.setText("开始计算");
}
}
if (e.getActionCommand().equals("开始计算")) {
String str = new String();
str = xCount.getText();
x = Integer.parseInt(str) - 1;
str = yCount.getText();
y = Integer.parseInt(str) - 1;
str = size.getText();
Size = Integer.parseInt(str);
title = 0;
chessBoard(0, 0, x, y, Size);
cube[x][y].setOpaque(true);
cube[x][y].setBackground(Color.WHITE);
cube[x][y].setText("特殊");
sumbit.setText("点击刷新确认棋盘");
xCount.setEditable(true);
size.setEditable(true);
yCount.setEditable(true);
}
}
});
frame.pack();
frame.setVisible(true);
// frame.setSize(300, 500);
frame.setBounds(new Rectangle(500, 200, 500, 400));
frame.addWindowListener(new WindowAdapter() {
public void WindowClosing(WindowEvent e) {
System.exit(0);
}
});
}
void chessBoard(int tr, int tc, int dr, int dc, int size) {
if (size == 1)
return;
int t = ++title;
int s = size / 2;
String str = Integer.toString(t);
int ci = ((cColor++) % 7);
if (dr < tr + s && dc < tc + s) {
chessBoard(tr, tc, dr, dc, s);
} else {
cube[tr + s - 1][tc + s - 1].setOpaque(true);
cube[tr + s - 1][tc + s - 1].setBackground(colors[ci]);
cube[tr + s - 1][tc + s - 1].setText(str);
chessBoard(tr, tc, tr + s - 1, tc + s - 1, s);
}
if (dr < tr + s && dc >= tc + s) {
chessBoard(tr, tc + s, dr, dc, s);
} else {
cube[tr + s - 1][tc + s].setOpaque(true);
cube[tr + s - 1][tc + s].setBackground(colors[ci]);
cube[tr + s - 1][tc + s].setText(str);
chessBoard(tr, tc + s, tr + s - 1, tc + s, s);
}
if (dr >= tr + s && dc < tc + s) {
chessBoard(tr + s, tc, dr, dc, s);
} else {
cube[tr + s][tc + s - 1].setOpaque(true);
cube[tr + s][tc + s - 1].setBackground(colors[ci]);
cube[tr + s][tc + s - 1].setText(str);
chessBoard(tr + s, tc, tr + s, tc + s - 1, s);
}
if (dr >= tr + s && dc >= tc + s) {
chessBoard(tr + s, tc + s, dr, dc, s);
} else {
cube[tr + s][tc + s].setOpaque(true);
cube[tr + s][tc + s].setBackground(colors[ci]);
cube[tr + s][tc + s].setText(str);
chessBoard(tr + s, tc + s, tr + s, tc + s, s);
}
}
public JLabel makelabel() {
JLabel l = new JLabel("0", JLabel.CENTER);
l.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
l.setPreferredSize(new Dimension(5, 5));
return l;
}
public static void main(String[] argv) {
new TestChessBoard();
}
}
四、实验截图
实验初始截图:
非法输入截图:
正确输入后的运行截图:
9
展开阅读全文