2017-10-21 124 views
0

嗨即时创建一个Java程序的分数矩阵复用,我已经创建了一个类的分数,下面的代码。矩阵乘法(分数)

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

接收分子和分母,在我的主要功能我收到矩阵的大小,创建矩阵的2x2 3x3的等等...和即时通讯目前得到预期的输出 。 我的问题是本身multiplicating矩阵,(因为that's我想要什么)

,所以这是我的主类代码

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; 
} 

但是当我打印方法transicion,打印相同的矩阵没有变化,请提供任何帮助或建议?

+1

但你永远不会使用'return laNueva;'值? –

回答

0

您正在创建新的Fraccion对象,但不会将它们分配给任何对象。所以......当然......没有什么变化。

一个更加阴险的问题是,你的分子和分母都被存储为int的值,并且你没有什么可以处理其中一个或另一个可能溢出的可能性。如果发生这种情况,你最终会得到垃圾值。

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

  • 最简单的选择是使用不会溢出的表示形式(用你的用例);例如BigInteger但这也是有限的...由你的堆大小。

  • 可以进一步推它,如果你能找到,并在分子和分母取消共同的因素,但分解是昂贵的...和顽固如果唯一因素是大素数。)

+0

好吧,所以现在即时通讯创建一个新的分数和分配方法的值,创建一个新的矩阵,在矩阵上输入该值 –

+0

private static Fraccion nueva; Fraccion [] [] nuev =新Fraccion [cuantos] [cuantos]; nueva =矩阵[i] [j] .producto_con(tmp [i] [j + 1]); nuev [i] [j] = nueva; –

+0

这可能是正确的。测试它。 –