我正在创建一个带分数的矩阵乘法的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;
}
但是当我打印方法转换时,打印相同的矩阵没有任何变化,请给我们任何帮助或建议吗?
答案 0 :(得分:0)
您正在创建新的Fraccion
对象,但之后却没有将它们分配给任何对象。所以...当然......没有任何改变。
一个更隐蔽的问题是你的分子和分母存储为int
值,而你没有任何东西可以处理其中一个或另一个可能溢出的可能性。如果发生这种情况,您将最终得到垃圾值。
使用大于Integer.MAX_VALUE
的分母/分子值正确处理是很困难的。
最简单的选择是使用不会溢出的表示(使用您的用例);例如BigInteger
但这也受到你的堆大小的限制。
如果能够在分母和分子中找到和取消公因子,你可以进一步推动它,但是因子分解是昂贵的......如果唯一的因素是大素数,则难以处理。)
< / LI>