实验7数组(2学时)
1.实验内容
设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols,矩阵数据数组double data[][],构造方法Matrix()、Matrix(int rows,int cols)、Matrix(int  rows,int cols,double data[][]),获取某元素值的方法getData(int row,int col),设置某元素值的方法setData(int row,int col,double value),计算两个矩阵的乘积的方法multiply(Matrix m)以及toString()等内容。
编写测试类MatrixTest,并在该类中创建两个矩阵对象,计算其乘积。
程序调试通过后填写实验报告。
2.预习内容
数组的定义
类的定义
3.实验类型 
设计型
4.实验目的
掌握数组的定义和使用
5.实验要求
编写Matrix类
编写MatrixTest类。在该类中通过键盘输入方式确定所要创建的两个矩阵的行列数,根据行列数随机生成数据或键盘输入,并通过setData方法生成矩阵的内容。
计算矩阵的乘积,并把结果通过toString方法输出到屏幕上
6.思考题
您还可以编写哪些Matrix类的方法?
如果没有setData方法,如何给矩阵的某个元素值赋值? 实验8  异常处理(2学时)
1.实验内容
为实验7添加矩阵相关的异常类,并在适当位置使用这些异常类。
2.预习内容
异常处理
3.实验类型 
验证型
4.实验目的
理解异常的使用和自定义异常类的方法。
理解throw和throws的区别和联系。
5.实验要求
编写矩阵行数或列数非法异常类IllegalArgumentException、矩阵行号或列号非法异常类IllegalIndexException以及矩阵无法相乘异常类MatrixMultiplicationException。这些类只需要包含toString非法即可。
在Matrix类的构造方法中,如果rows或cols变量值小于1,抛出IllegalArgumentException异常;在getData和setData方法中,如果row或col大于等于矩阵行数或列数,抛出IllegalIndexException异常;在multiply非法中,如果两个矩阵的行列数不满足矩阵相乘规则,抛出MatrixMultiplicationException异常。
在MatrixTest类中测试上述异常定义是否有效。
提交调试通过的Java程序。
实验9 图形用户界面(4学时)
1.实验内容
编写一个简易计算器程序,其界面如下图所示:用户界面可以手工编码的形式构造,也可以使用Netbeans、Eclipse等开发工具。
2.预习内容
图形界面程序的特点
事件处理机制的原理
3.实验类型 
设计型
4.实验目的
掌握图形界面程序的设计方法和事件处理机制
5.实验要求
编写各个按钮的代码,使得能够进行四则运算。
当按下“+”按钮时,两个数值文本框之间应显示“+”号,同时相加结果显示在第三个文本框内(如下图所示)。类似处理“-”、“*”和“/”按钮。应处理除0异常和数值格式非法异常,如:
   
程序调试通过后填写实验报告。
实验10  输入/输出处理(4学时)
1.实验内容
实现一个简单的图形界面文本编辑器(如下图所示),该程序从磁盘读入文本文件,并将内容显示到JTextArea中。也可以将JTextArea内容保存到原文件或另存到其它文件中。2.预习内容
输入/输出处理、异常处理、图形用户界面
3.实验类型 
综合型
4.实验目的
(1) 理解流的操作
(2) 能够创建、读写、更新文件
5.实验要求
在以上操作中,均要求带有异常处理结构。
提交调试通过的Java程序。
6.实验提示
在JFrame中添加菜单可以用如下代码:
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenu1 = new JMenu("文件");
JMenuItem jMenuItem1 = new JMenuItem("打开");
JMenuItem jMenuItem2 = new JMenuItem("保存");
JMenuItem jMenuItem3 = new JMenuItem("另存为");
JMenuItem jMenuItem4 = new JMenuItem("退出");
JSeparator jSeparator1 = new JSeparator();
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu1.add(jMenuItem3);
jMenu1.add(jSeparator1);
jMenu1.add(jMenuItem4);
jMenuBar1.add(jMenu1);
frame.setJMenuBar(jMenuBar1);
默认情况下JtextArea没有滚动条,若要添加滚动条,需要用以下代码:
jScrollPane1 = new JScrollPane();
jTextArea1 = new JTextArea();
jScrollPane1.setViewportView(jTextArea1);
frame.add(jScrollPane1);
实验11  线程(2学时)
1.实验内容
编写一个世界时钟程序,界面如下图所示:在主窗口上至少显示两个时区的时间。
2.预习内容
图形界面程序
线程
3.实验类型 
设计型
4.实验目的
掌握多线程程序的编写
5.实验提示
获取时间、换算时区以及转化为字符串的代码如下:
        Calendar now = Calendar.getInstance();
        now.add(Calendar.HOUR,  timeInterval);
                //timeInterval为与北京时间相差的时数,如纽约为-12,伦敦为-7,东京为+2
        String sdf=new SimpleDateFormat("HH:mm:ss").format(now.getTime());
设置JLabel字体的代码如下:
Font font=new Font("宋体",Font.BOLD,30);
l1=new JLabel("北京时间");
l1.setFont(font);
6.思考题
如何提高本实验的代码重用程度?能不能用一个类实现所有线程?

解决方案 »

  1.   

    //实验7数组(2学时) 
    class Matrix {
     int rows;
     int cols;
     double[][] data;
    Matrix() {
    rows = cols = 0;
    this.data = new double[rows][cols];
    }
    Matrix(int rows,int cols) {
    this.rows = rows;
    this.cols = cols;
    this.data = new double[rows][cols];
    }
       Matrix(int rows,int cols,double[][] data) {
       
       this.rows = rows;
       this.cols = cols;
       this.data = new double[rows][cols];
       if(data.length == this.data.length) {
       for(int i=0; i<this.rows; i++)
       for(int j=0; j<this.cols; j++)
       this.data[i][j] = data[i][j];
       }
       else System.out.println("二维数组长度不同!");
       }
       public double getData(int row,int col) {
       return data[row][col];
       }
       public void setData(int row,int col,double value) {
       data[row][col] = value;
       }
       public Matrix multiply(Matrix m) {
       Matrix temp= new Matrix(this.rows, m.cols);
       /*temp.rows = this.rows;
       temp.cols = m.cols;*/
       int sum;
       for(int i=0; i<this.rows; i++)
       for(int j=0; j<m.cols; j++){
       sum = 0;
       for(int k=0; k<this.cols; k++)
       sum += this.data[i][k]*m.data[k][j];
       temp.data[i][j] = sum;
       }    return temp;
       }
       public String toString() {
       for(int i=0; i<this.rows; i++){
       for(int j=0; j<this.cols; j++)
       System.out.print(this.data[i][j]+" ");
       System.out.println();
       }
       return " ";
       }}
    public class MatrixTest {
    public static void main(String[] args) {
    double[][] array1 ={
    {10, 0, 5, 7},
    {2, 1, 0, 0},
    {3, 0, 4, 0},
    };
    double[][] array2 ={
    {2, 0},
    {4, 8},
    {0, 14},
    {3, 5},
    };
    Matrix matrix1 = new Matrix(3,4,array1);
    Matrix matrix2 = new Matrix(4,2,array2);
    Matrix matrix3 = matrix1.multiply(matrix2);
    System.out.println(matrix3);
    }
    }
    /* 输出应为:
    41.0 105.0 
    8.0 8.0 
    6.0 56.0 
     
    */