📄 matrix.java
字号:
package datastructure;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Matrix
extends Panel
implements Runnable, ActionListener {
private Thread runner;
private int groupSize;
private boolean runFlag = false;
private boolean doneFlag = false;
private int codePart = 1;
//控制演示速度
private GlobalControls controlsPanel = new GlobalControls();
private int controls;
static JButton newButton;
static JButton runButton;
static JButton stepButton;
static JButton stayButton;
private int delay; //用来控制速度
CodeAnimationPanel codePanel;
Panel panel;
Panel centerPanel;
Panel eastPanel;
JTextField textfield11;
JTextField textfield12;
JTextField textfield21;
JTextField textfield22;
JTextField textfield31;
JTextField textfield32;
JTextField textfield41;
JTextField textfield42;
JTextField textfield51;
JTextField textfield52;
//int matrixarray[][]=new int[12][12];
ThreeElem[] data = new ThreeElem[9]; //初始化M 的三元组
int[] num = new int[20]; //M每列中有多少
int[] cpot = new int[20]; //M中每列中的第一元素的位置
int col = 1; //列
int t = 1;
int p = 1; //M中的三元组的位置
int q; //M中第一元素的位置
int position;
int drawMode = 1; //绘制方式
int subDrawMode = 1; //绘制方式
TSMatrix M;
TSMatrix T;
Label[] iLabelM = new Label[20]; //
Label[] jLabelM = new Label[20];
Label[] dataLabelM = new Label[20];
Label[] iLabelT = new Label[20];
Label[] jLabelT = new Label[20];
Label[] dataLabelT = new Label[20];
Label[] colLabel = new Label[20];
Label[] numLabel = new Label[20];
Label[] coltLabel = new Label[20];
Label iprompt;
Label jprompt;
Label dataPrompt;
Label tPromptRow;
Label tPromptCol;
Label tPromptData;
Label colprompt;
Label numPrompt;
Label coltPrompt;
boolean moveFlag = true;
int movePos;
int moveEnd;
public void init() {
String as[] = {
"status FastTranspose(TSMatrix M,TsMatrix&T)",
"{ //稀疏矩阵的快速转置的C语言伪代码",
" T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;",
" if(T.tu){",
" for(col=1;col<=M.nu;++col)",
" num[col]=0;",
" for(t=1;t<=M.tu;++t)",
" ++num[M.data[t].j]",
" cpot[l]=1;",
" for(col=2;col<=M.nu;++col)",
" cpot[col]=cpot[col-1]+num[col-1]",
" for(p=1;p<=M.tu;++p){",
" col=M.data[p].j;",
" q=cpot[col]",
" T.data[q].i=M.data[p].j;",
" T.data[q].j=M.data[p].i",
" T.data[q].e=M.data[p].e;",
" ++cpot[col]; }",
// " }//if",
"return ok;}"};
this.setBackground(Color.lightGray);
data[1] = new ThreeElem(1, 1, 12);
data[2] = new ThreeElem(1, 3, 9);
data[3] = new ThreeElem(3, 1, -3);
data[4] = new ThreeElem(3, 6, 14);
data[5] = new ThreeElem(4, 3, 24);
data[6] = new ThreeElem(5, 2, 18);
data[7] = new ThreeElem(6, 1, 15);
data[8] = new ThreeElem(6, 4, -7);
M = new TSMatrix(6, 6, 8, data);
controlsPanel.delay = 900;
codePanel = new CodeAnimationPanel(as);
this.setLayout(new BorderLayout());
runFlag = false;
eastPanel = new Panel();
eastPanel.setLayout(new BorderLayout());
panel = new Panel();
panel.setLayout(new GridLayout(5, 2));
eastPanel.add(codePanel, BorderLayout.NORTH);
eastPanel.add(panel, BorderLayout.CENTER);
this.add(eastPanel, BorderLayout.EAST);
centerPanel = new Panel();
centerPanel.setLayout(null);
this.add(centerPanel, BorderLayout.CENTER);
textfield11 = new JTextField(" 变 量 名");
textfield11.setEditable(false);
textfield12 = new JTextField(" 变 量 值 ");
textfield12.setEditable(false);
textfield21 = new JTextField(" col");
textfield21.setEditable(false);
textfield22 = new JTextField("");
textfield22.setEditable(false);
textfield31 = new JTextField(" q");
textfield31.setEditable(false);
textfield32 = new JTextField(" ");
textfield32.setEditable(false);
textfield41 = new JTextField(" p");
textfield41.setEditable(false);
textfield42 = new JTextField("");
textfield42.setEditable(false);
textfield51 = new JTextField(" ++cpot[col]");
textfield51.setEditable(false);
textfield52 = new JTextField("");
textfield52.setEditable(false);
panel.add(textfield11);
panel.add(textfield12);
panel.add(textfield21);
panel.add(textfield22);
panel.add(textfield31);
panel.add(textfield32);
panel.add(textfield41);
panel.add(textfield42);
panel.add(textfield51);
panel.add(textfield52);
newButton = new JButton("新 建");
newButton.addActionListener(this);
runButton = new JButton("运 行");
runButton.addActionListener(this);
stepButton = new JButton("单 步");
stepButton.addActionListener(this);
stayButton = new JButton("暂 停");
stayButton.addActionListener(this);
}
public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
public void stop() {
if (runner != null) {
runner = null;
}
}
public void paint(Graphics g) {
draw();
}
public void draw() {
switch (drawMode) {
case 1:
initDraw();
drawMode = 4;
break;
case 2:
this.numLabel[position].setText("0");
return;
case 3:
this.numLabel[M.data[t -
1].col].setText(String.valueOf(num[M.data[t - 1].col]));
break;
case 4:
drawMode = 4;
break;
case 5:
this.coltLabel[position].setText(String.valueOf(cpot[position]));
drawMode = 4;
break;
case 6:
switch (subDrawMode) {
case 1:
this.iLabelT[movePos] = new Label("0");
iLabelT[movePos].setSize(40, 25);
iLabelT[movePos].setLocation(20 + p * 42, 120);
iLabelT[movePos].setAlignment(Label.CENTER);
iLabelT[movePos].setBackground(Color.red);
this.centerPanel.add(iLabelT[movePos]);
this.jLabelT[movePos] = new Label("0");
jLabelT[movePos].setSize(40, 25);
jLabelT[movePos].setLocation(20 + p * 42, 145);
jLabelT[movePos].setAlignment(Label.CENTER);
jLabelT[movePos].setBackground(Color.yellow);
this.centerPanel.add(jLabelT[movePos]);
this.dataLabelT[movePos] = new Label("0");
dataLabelT[movePos].setSize(40, 25);
dataLabelT[movePos].setLocation(20 + p * 42, 170);
dataLabelT[movePos].setAlignment(Label.CENTER);
dataLabelT[movePos].setBackground(Color.blue);
this.centerPanel.add(dataLabelT[movePos]);
drawMode = 4;
break;
case 2:
iLabelT[movePos].setText(String.valueOf(M.data[movePos].row));
jLabelT[movePos].setText(String.valueOf(M.data[movePos].col));
dataLabelT[movePos].setText(String.valueOf(M.data[movePos].data));
drawMode = 4;
break;
case 3:
iLabelT[movePos].setText(String.valueOf(M.data[movePos].col));
drawMode = 4;
break;
case 4:
jLabelT[movePos].setText(String.valueOf(M.data[movePos].row));
drawMode = 4;
break;
case 5:
dataLabelT[movePos].setText(String.valueOf(M.data[movePos].data));
drawMode = 4;
break;
case 6:
int moveStart = movePos;
moveFlag = true;
iLabelT[movePos].setLocation(20 + moveEnd * 42, 250);
jLabelT[movePos].setLocation(20 + moveEnd * 42, 275);
dataLabelT[movePos].setLocation(20 + moveEnd * 42, 300);
drawMode = 4;
break;
}
}
}
public void initDraw() {
iprompt = new Label("M 行");
iprompt.setSize(40, 25);
iprompt.setLocation(20, 20);
iprompt.setBackground(Color.red);
iprompt.setAlignment(Label.CENTER);
centerPanel.add(iprompt);
jprompt = new Label("M 列");
jprompt.setSize(40, 25);
jprompt.setLocation(20, 45);
jprompt.setBackground(Color.yellow);
jprompt.setAlignment(Label.CENTER);
centerPanel.add(jprompt);
dataPrompt = new Label("M 数据");
dataPrompt.setSize(40, 25);
dataPrompt.setLocation(20, 70);
dataPrompt.setBackground(Color.blue);
dataPrompt.setAlignment(Label.CENTER);
centerPanel.add(dataPrompt);
for (int i = 1; i <= M.tu; i++) {
// iLabelM=new Label[M.tu+1];
iLabelM[i] = new Label(String.valueOf(M.data[i].row));
iLabelM[i].setSize(40, 25);
iLabelM[i].setLocation(20 + 42 * i, 20);
iLabelM[i].setBackground(Color.red);
iLabelM[i].setAlignment(Label.CENTER);
centerPanel.add(iLabelM[i]);
jLabelM = new Label[M.tu + 1];
jLabelM[i] = new Label(String.valueOf(M.data[i].col));
jLabelM[i].setSize(40, 25);
jLabelM[i].setLocation(20 + 42 * i, 45);
jLabelM[i].setBackground(Color.yellow);
jLabelM[i].setAlignment(Label.CENTER);
centerPanel.add(jLabelM[i]);
dataLabelM = new Label[M.tu + 1];
dataLabelM[i] = new Label(String.valueOf(M.data[i].data));
dataLabelM[i].setSize(40, 25);
dataLabelM[i].setLocation(20 + 42 * i, 70);
dataLabelM[i].setBackground(Color.blue);
dataLabelM[i].setAlignment(Label.CENTER);
centerPanel.add(dataLabelM[i]);
}
tPromptRow = new Label("T 行");
tPromptRow.setSize(40, 25);
tPromptRow.setLocation(20, 250);
tPromptRow.setBackground(Color.red);
tPromptRow.setAlignment(Label.CENTER);
centerPanel.add(tPromptRow);
tPromptCol = new Label("T 列");
tPromptCol.setSize(40, 25);
tPromptCol.setLocation(20, 275);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -