使用java中的泛型类添加Matrix

时间:2015-08-03 18:16:59

标签: java generics

这里我已经使用泛型类实现了矩阵加法程序,但它给了我错误的程序答案。请你帮我解决这个问题。对我来说这将是一个很大的帮助...在此先感谢...

package practical_5;

class MatrixOperation<T extends Number,V extends Number>
{
    T[][] m1;
    V[][] m2;
    MatrixOperation(T[][] o,V[][] b)
    {
        m1=o;
        m2=b;
    }
    void addition()
    {

        double ans[][]=new double[m1.length][m2.length];
        for(int i=0;i<m1.length;i++)
        {
           for(int j=0;j<m1[0].length;j++)
           {

               ans[i][j]=m1[i][j].doubleValue()+m2[i][j].doubleValue();
               System.out.print(ans[i][j]);
           }
        }
    }
    void display(T[][] m1,V[][] m2,double ans[][])
    {
        for(int i=0;i<m1.length;i++){
        for(int j=0;j<m2[0].length;j++){
            System.out.print(ans[i][j]);
        }
        }
    }
}
class Matrix{
    public static void main(String[] args) {
        Integer m[][]=new Integer[3][3];
        Integer m1[][]=new Integer[3][3];
        double ans[][]=new double[3][3];
        int cnt=0;
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                m[i][j]=++cnt;
                System.out.print(m[i][j]);
            }
        }
        System.out.println("");
         for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                m1[i][j]=cnt--;
                System.out.print(m1[i][j]);
            }
        }
        MatrixOperation<Integer,Integer> mobj=new MatrixOperation<Integer,Integer>(m,m1);
        mobj.addition();
        mobj.display(m, m1, ans);

    }
}

2 个答案:

答案 0 :(得分:0)

当您调用addition方法时,您将声明自己的本地ans 2D数组,并忽略您自己的结果。 ans中的main 2D数组未更改,因此它仍具有所有默认值 - 0.0

而是return ans中的addition数组。另外,在addition中将ans的结果分配给main

在打印出矩阵时,它还有助于在您的数字和行之间的换行符之间打印一些空格。

答案 1 :(得分:0)

您没有将ans设置为main()内的任何内容,因此它会全部为零。调用addition()内部的输出对我来说似乎是正确的。

一种解决方案是重新定义addition()方法以返回double[][]而不是void。在该方法的末尾添加return ans;。在main()中,将mobj.addition()的返回值指定给局部变量ans

或者,在ans中创建MatrixOperation字段,摆脱ansaddition()中的本地main()变量并使用{{1 } mobj.ans {和main()内的ans字段。