zoukankan      html  css  js  c++  java
  • 矩阵的加、减、乘、除、toString、equals、hashCode、clone

      1 package com.jdk7.chapter4;
      2 
      3 import java.text.DecimalFormat;
      4 import java.util.Arrays;
      5 
      6 /**
      7  * 数组的加减乘除
      8  * @author Administrator
      9  *
     10  */
     11 
     12 public class MatrixData implements Cloneable{
     13     //声明一个私有double类型的二维数组存放数据,私有变量只能在该类中使用,不能被外部调用
     14     private double[][] matrixData;
     15     
     16     //无参构造函数
     17     public MatrixData(){
     18         //用默认值进行初始化
     19         this.init();
     20     }
     21     
     22     //带参构造函数
     23     public MatrixData(double[][] b){
     24         //二维数组b为空则调用默认值进行初始化
     25         if(!arraySameLength(b)){
     26             System.out.println("数组第二维长度不等");
     27             this.init();
     28         }else{        //二维数组b不为空,则将b克隆
     29             System.out.println("数组第二维长度都相等");
     30             this.matrixData = b;
     31         }
     32     }
     33     
     34     public MatrixData add(MatrixData data){
     35         if(data==null){return null;}
     36         
     37         double[][] datab = data.getMatrixData();
     38         MatrixData c = null;
     39         if(!sameLength(data)){
     40             return c;
     41         }else{
     42             double[][] datac = new double[this.matrixData.length][this.matrixData[0].length];
     43             for(int i=0;i<this.matrixData.length;i++){
     44                 for(int j=0;j<this.matrixData[0].length;j++){
     45                     datac[i][j] = this.matrixData[i][j] + data.matrixData[i][j];
     46                 }
     47             }
     48             c = new MatrixData(datac);
     49             return c;
     50         }
     51     }
     52     
     53     public MatrixData sub(MatrixData b){
     54         if(b==null){return null;}
     55         double[][] datab = b.getMatrixData();
     56         MatrixData c = null;
     57         if(sameLength(b)){
     58             double[][] datac = new double[this.matrixData.length][this.matrixData[0].length];
     59             for(int i=0;i<this.matrixData.length;i++){
     60                 for(int j=0;j<this.matrixData[0].length;j++){
     61                     datac[i][j] = this.matrixData[i][j] - datab[i][j];
     62                 }
     63             }
     64             c = new MatrixData(datac);
     65             return c;
     66         }else{
     67             return c;
     68         }
     69     }
     70     
     71     public MatrixData multiply(MatrixData data){
     72         if(data==null){return null;}
     73         double[][] datab = data.getMatrixData();
     74         MatrixData c = null;
     75         if(sameLength(data)){
     76             double[][] datac = new double[this.matrixData.length][this.matrixData[0].length];
     77             for(int i=0;i<this.matrixData.length;i++){
     78                 for(int j=0;j<this.matrixData[0].length;j++){
     79                     datac[i][j] = this.matrixData[i][j] * datab[i][j];
     80                 }
     81             }
     82             c = new MatrixData(datac);
     83             return c;
     84         }else{
     85             return c;
     86         }
     87     }
     88     
     89     public MatrixData division(MatrixData data){
     90         if(data==null){return null;}
     91         double[][] datax = data.getMatrixData();
     92         MatrixData c = null;
     93         if(sameLength(data)){
     94             double[][] datac = new double[this.matrixData.length][this.matrixData[0].length];
     95             for(int i=0;i<this.matrixData.length;i++){
     96                 for(int j=0;j<this.matrixData[0].length;j++){
     97                     if(datax[i][j]==0){
     98                         System.out.println("商不能为零");
     99                         break;
    100                     }else{
    101                         datac[i][j] = (this.matrixData[i][j] / datax[i][j]);
    102                     }
    103                 }
    104             }
    105             c = new MatrixData(datac);
    106             return c;
    107         }else{
    108             return c;
    109         }
    110     }
    111     
    112     //判断二维长度是否相等
    113     public boolean sameLength(MatrixData b){
    114         if(this.matrixData.length != b.matrixData.length || this.matrixData[0].length != b.matrixData[0].length){
    115             return false;
    116         }else{
    117             return true;
    118         }
    119     }
    120 
    121     //默认的二维数组
    122     private void init() {
    123         this.matrixData = new double[][]{{1,2,0},{4,5,6},{7,8,9}};
    124     }
    125     
    126     public double[][] getMatrixData() {
    127         return matrixData;
    128     }
    129 
    130     public void setMatrixData(double[][] matrixData) {
    131         this.matrixData = matrixData;
    132     }
    133 
    134     public Object clone(){
    135         try {
    136             System.out.println("调用clone方法");
    137             MatrixData src = (MatrixData)super.clone();
    138             src.setMatrixData(this.matrixData);
    139             return src;
    140         } catch (CloneNotSupportedException e) {
    141             e.printStackTrace();
    142         }
    143         return null;
    144     }
    145     
    146     public int hashCode(){
    147         return this.toString().hashCode();
    148     }
    149     
    150     /**
    151      * 在比较的过程中涉及到多层嵌套条件判断,最外层的正反两面都要给予对应的返回结果,如果内层的返回结果同外层不一致,则需指定确切的返回结果,
    152      * 反面情况保持默认的返回结果
    153      */
    154     public boolean equals(Object data){
    155         if(data==null){
    156             return false;
    157             }
    158         if(data instanceof MatrixData){
    159             MatrixData datax = (MatrixData) data;
    160             if(sameLength(datax)){
    161                 for(int i=0;i<this.matrixData.length;i++){
    162                     for(int j=0;j<this.matrixData[0].length;j++){
    163                         if(this.matrixData[i][j] != datax.matrixData[i][j]){
    164                             return false;
    165                         }
    166                     }
    167                 }
    168             }
    169         return true;
    170         }else{return false;}
    171     }
    172     //二位数组的二维长度相等
    173     public boolean arraySameLength(double[][] b){
    174         for(int i=0;i<b.length-1;i++){
    175             if(b[i].length != b[i+1].length){
    176                 return false;
    177             }
    178         }
    179         return true;
    180     }
    181     
    182     //将所有的打印信息放入StringBuffer中再转换为String类型,包括空格和换行
    183     public String arrayToString(double[][] b){
    184         StringBuffer sb = new StringBuffer("");
    185         
    186         //按照指定的格式进行格式化
    187         DecimalFormat df = new DecimalFormat();
    188         String pattern = "0.00";
    189         df.applyPattern(pattern);
    190         
    191         for(int i=0;i<b.length;i++){
    192             for(int j=0;j<b[0].length;j++){
    193 //                sb.append((Double.valueOf(b[i][j])).toString()).append(" ");
    194                 sb.append(df.format((Double.valueOf(b[i][j]))).toString()).append(" ");
    195             }
    196             sb.append("
    ");
    197         }
    198         return  sb.toString();
    199     }
    200     
    201     @Override
    202     public String toString() {
    203 //        return "MatrixData [matrixData=" + Arrays.toString(matrixData) + "]";
    204         return this.arrayToString(this.matrixData);
    205     }
    206     
    207     public void display(){
    208         System.out.println(this.toString());
    209     }
    210 
    211 }
     1 package com.jdk7.chapter4;
     2 
     3 public class Test {
     4     public static void main(String[] args) {
     5         double[][] array0 = new double[][]{{9.0,8.0,7.0},{6.0,5.0,4.0},{3.0,2.0,1.0}};
     6         MatrixData m0 = new MatrixData(array0);
     7         MatrixData m1 = new MatrixData();
     8         System.out.print("数组m0为: ");
     9         m0.display();
    10         System.out.print("数组m1为: ");
    11         m1.display();
    12         System.out.print("数组(m0 + m1)为: ");
    13         m0.add(m1).display();
    14         System.out.print("数组(m0 - m1)为: ");
    15         m0.sub(m1).display();
    16         System.out.print("数组(m0 * m1)为: ");
    17         m0.multiply(m1).display();
    18         MatrixData m2 = (MatrixData)m0.clone();
    19         System.out.print("从m0克隆的m2为: ");
    20         m2.display();
    21         System.out.println("m0的哈希码为: "+m0.hashCode());
    22         System.out.println("m2的哈希码为: "+m2.hashCode());
    23         System.out.println("m0和m2是否相等: "+m0.equals(m2));
    24         System.out.print("数组m3为: ");
    25         MatrixData m3 = null;
    26         UsingArrays ua = new UsingArrays();
    27         System.out.println("m0和m3是否相等: "+m0.equals(m3));
    28         System.out.println("m0和m1是否相等: "+m0.equals(m1));
    29         System.out.println("m0和ua是否相等: "+m0.equals(ua));
    30         
    31         System.out.print("数组(m0 / m1)为: ");
    32         m0.division(m1).display();
    33     }
    34 
    35 }
    36 
    37 
    38 执行结果:
    39 数组第二维长度都相等
    40 数组m0为: 9.00 8.00 7.00 
    41 6.00 5.00 4.00 
    42 3.00 2.00 1.00 
    43 
    44 数组m1为: 1.00 2.00 0.00 
    45 4.00 5.00 6.00 
    46 7.00 8.00 9.00 
    47 
    48 数组(m0 + m1)为: 数组第二维长度都相等
    49 10.00 10.00 7.00 
    50 10.00 10.00 10.00 
    51 10.00 10.00 10.00 
    52 
    53 数组(m0 - m1)为: 数组第二维长度都相等
    54 8.00 6.00 7.00 
    55 2.00 0.00 -2.00 
    56 -4.00 -6.00 -8.00 
    57 
    58 数组(m0 * m1)为: 数组第二维长度都相等
    59 9.00 16.00 0.00 
    60 24.00 25.00 24.00 
    61 21.00 16.00 9.00 
    62 
    63 调用clone方法
    64 从m0克隆的m2为: 9.00 8.00 7.00 
    65 6.00 5.00 4.00 
    66 3.00 2.00 1.00 
    67 
    68 m0的哈希码为: 363974377
    69 m2的哈希码为: 363974377
    70 m0和m2是否相等: true
    71 数组m3为: m0和m3是否相等: false
    72 m0和m1是否相等: false
    73 m0和ua是否相等: false
    74 数组(m0 / m1)为: 商不能为零
    75 数组第二维长度都相等
    76 9.00 4.00 0.00 
    77 1.50 1.00 0.67 
    78 0.43 0.25 0.11 
  • 相关阅读:
    关于基于.net的WEB程序开发所需要的一些技术归纳
    技术的学习方法探索之一
    生活,就是让程序为人们服务!
    js滑动提示效果
    radio判断是否为空
    JS清除网页历史记录,屏蔽后退按钮
    多表查询存储过程
    IP地址转化为数字,charindex ,SUBSTRING
    c# byte转化为string
    获得IP地址中文
  • 原文地址:https://www.cnblogs.com/celine/p/8428326.html
Copyright © 2011-2022 走看看