矩阵乘法(分数)

时间:2017-10-21 02:48:55

标签: java matrix fractions

我正在创建一个带分数的矩阵乘法的java程序,我已经创建了一个类Fraction,代码如下。

public Fraccion (int n,int m){
    numerador = n;
    denominador = m;
}

接收分子和分母,在我的主函数中我收到矩阵的大小,创建矩阵2x2 3x3等等...... 而我目前正在获得预期的产量。 我的问题是将矩阵自身相乘,(因为这就是我想要的)

所以这是我的Main类的代码

private static void transicion()
{
    //size of matriz
    Fraccion[][] tmp = new Fraccion[cuantos][cuantos];
    //cloning the matrix to a temporal matrix
    tmp = matrix.clone();
    //set boundaries for matrix so dont go out of bounds
    int rowLimit = matrix.length;
    int colLimit = matrix[0].length;

    for (int i = 0; i < matrix.length; i++)
    {
        for (int j = 0; j < matrix[i].length; j++)
        {
            //method to multiply a fraction with another (producto_con)
            if ((j+1<colLimit) && (matrix[i][j] == matrix[i][j+1]))
                matrix[i][j].producto_con(tmp[i][j+1]);
            if ((i+1<rowLimit) && (matrix[i][j] == matrix[i+1][j]))
                matrix[i][j].producto_con(tmp[i][j+1]);
            System.out.println();
            matrix[i][j].imprimete();
        }
        System.out.println();
    }

}
//this is the method to multiply fractions on the fraction class
public Fraccion producto_con(Fraccion laOtra){
    int numTmp, denTmp;
    numTmp = numerator * laOtra.getnumerator();
    denTmp = denominator * laOtra.getdenominator();
    Fraccion laNueva = new Fraccion(numTmp,denTmp);
    return laNueva;
}

但是当我打印方法转换时,打印相同的矩阵没有任何变化,请给我们任何帮助或建议吗?

1 个答案:

答案 0 :(得分:0)

您正在创建新的Fraccion对象,但之后却没有将它们分配给任何对象。所以...当然......没有任何改变。

一个更隐蔽的问题是你的分子和分母存储为int值,而你没有任何东西可以处理其中一个或另一个可能溢出的可能性。如果发生这种情况,您将最终得到垃圾值。

使用大于Integer.MAX_VALUE的分母/分子值正确处理是很困难的。

  • 最简单的选择是使用不会溢出的表示(使用您的用例);例如BigInteger但这也受到你的堆大小的限制。

  • 如果能够在分母和分子中找到和取消公因子,你可以进一步推动它,但是因子分解是昂贵的......如果唯一的因素是大素数,则难以处理。)

    < / LI>