啊Lieo的JAVA处男作——通过Java的GUI演示矩阵相乘

  以前一直没学过JAVA,因为.NET我还没有玩够。这个学期开了JAVA课,所以决定顺便学习。

  不过呢,课程学到现在,貌似还没学到什么东西(感觉和.NET差不多),于是我就一直没听,也没学。这次老师要我们做个矩阵相乘的程序,我就想正好学习下JAVA的GUI和文件处理方面的东西,于是就诞生了这个程序。代码在后面,大家可以稍微瞄一眼。

  这个程序正是偶完全编写的第一个Java程序,因此很有纪念意义哦。虽然这个程序显得有点弱智,但还是算我的Hello World吧!(由于是第一个JAVA程序,JAVA强人禁止BS偶,等偶学得多点了再来BS)

/*
实验名称:用Java的GUI演示矩阵相乘
作者:计算机科学与技术084 谢XX
实验时间:2010年5月5日
*/

/*
说明:请将待相乘的矩阵内容保存为文本文件,之后在程序运行时输入文件名以打开
格式:
X1 Y1 //第一个矩阵的行数和列数
以下X1行Y1列的整数,用空格分开,为第一个矩阵的内容
X2 Y2 //第二个矩阵的行数和列数
以下X2行Y2列的整数,用空格分开,为第二个矩阵的内容
*/
import javax.swing.*;
import java.io.File;
import java.awt.*;
import javax.swing.JOptionPane;

public class MatrixMultipler extends JFrame{

private static final long serialVersionUID = 1L;

public MatrixMultipler(String title){
    //初始化窗体的各种属性,并显示窗体
    this.setTitle(title);
    this.setSize(500,400);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
      
    this.setLayout(new GridLayout(2,1,5,5));
    this.setVisible(true);
}

public static void main(String[] args) {
  
   int x1,y1,x2,y2; //存储两个矩阵的行列数
  
   //Mat1, Mat2是待相乘的两个矩阵, Mat3存放相乘后的结果
   int[][] Mat1;
   int[][] Mat2;
   int[][] Mat3;
  
   MatrixMultipler MainFrame=new MatrixMultipler("Lieo Matrix Multipler");
  
   //在窗体中添加两个文本框,用于显示计算前后的矩阵
   JTextArea txtOri=new JTextArea();
   JTextArea txtRes=new JTextArea();
  
   //将文本框置于JSrollPane中,以便添加滚动条
   JScrollPane Panel1=new JScrollPane(txtOri);
   JScrollPane Panel2=new JScrollPane(txtRes);
   MainFrame.add(Panel1);
   MainFrame.add(Panel2);
  
   try
   {
    int i,j,k;
   
    String FileName=JOptionPane.showInputDialog(MainFrame,
      "请输入矩阵存放的文件名称(包括路径):","D:input.txt");
   
    //txt1和txt2分别存储要在文本框中显示的内容
    String txt1="A=";
    String txt2="A*B=";
   
    File finput=new File(FileName);
    java.util.Scanner scnInput=new java.util.Scanner(finput);
   
    //读入第一个矩阵的行列数
    x1=scnInput.nextInt();
    y1=scnInput.nextInt();
   
    //读入第一个矩阵的内容
    Mat1=new int[x1][y1];
    for (i=0;i<x1;i++)
    {
     txt1+="n";
    
     for (j=0;j<y1;j++)
     {
      Mat1[i][j]=scnInput.nextInt();
      txt1+=Mat1[i][j]+" ";
     }
    }
   
    txt1+="nnB=";
    //读入第二个矩阵的行列数
    x2=scnInput.nextInt();
    y2=scnInput.nextInt();
   
    //读入第二个矩阵的内容
    Mat2=new int[x2][y2];
    for (i=0;i<x2;i++)
    {
     txt1+="n";
     for (j=0;j<y2;j++)
     {
      Mat2[i][j]=scnInput.nextInt();
      txt1+=Mat2[i][j]+" ";
     }
    }
   
    txtOri.setText(txt1);
   
    scnInput.close();
   
    //如果第一个矩阵的列数与第二个矩阵的行数不相等,则不允许相乘
    if (y1!=x2)
    {
     JOptionPane.showMessageDialog(null, "第一个矩阵的列数与第二个矩阵的行数不相等,不允许相乘。");
     MainFrame.dispose();
     return;
    }
   
    Mat3=new int[x1][y2];
    for(i=0;i<x1;i++)
     for(j=0;j<y2;j++)
      for(k=0;k<y1;k++)
       Mat3[i][j]+=Mat1[i][k]*Mat2[k][j];
   
    for (i=0;i<x1;i++)
    {
     txt2+="n";
     for (j=0;j<y2;j++)
      txt2+=Mat3[i][j]+" ";
    }
   
    txtRes.setText(txt2);
   }
  
   catch (Exception ex)
   {
    JOptionPane.showMessageDialog(null,
     "文件读取错误。n可能文件不存在或文件内容有误。n错误信息:"+ex);
    MainFrame.dispose();
    return;
   }
  
}

}

✏️ 有任何想法?欢迎发邮件告诉老夫:daozhihun@outlook.com