⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.java

📁 本软件是使用java 开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -