以前一直没学过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;
}
}
}