2017-10-21 28 views
0

Salut im en train de créer un programme java pour la multiplication matricielle avec fractions, je crée déjà une fraction de classe, code ci-dessous.Multiplication matricielle (fractions)

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

qui reçoit numérateur et le dénominateur, dans ma fonction principale que je reçois la taille de la matrice, pour créer la matrice 2x2 3x3 et ainsi de suite ... et Im actuellement obtenir le résultat attendu. mon problème est de la matrice par multiplication de lui-même, (parce que thats ce que je veux)

donc c'est mon code pour la classe principale

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

mais quand j'imprime la méthode Transicion, imprime la même matrice sans aucun changement, aucune aide ou conseil s'il vous plaît?

+1

mais vous n'utilisez jamais la valeur «retour laNueva; –

Répondre

0

Vous créez de nouveaux objets Fraccion mais vous ne les attribuez à aucun objet. Alors ... bien sûr ... rien ne change.

Un problème plus insidieux est que votre numérateur et votre dénominateur sont stockés en tant que valeurs int, et vous n'avez rien à faire avec la possibilité que l'un ou l'autre peut déborder. Si cela arrive, vous finirez avec des valeurs de déchets.

Il est difficile de traiter correctement les valeurs du dénominateur/numérateur supérieures à Integer.MAX_VALUE.

  • L'option la plus simple est d'utiliser une représentation qui ne débordera pas (avec votre cas d'utilisation); par exemple. BigInteger mais cela est également limité ... par la taille de votre tas.

  • Vous pouvez pousser plus loin si vous êtes en mesure de trouver et d'annuler les facteurs communs dans le dénominateur et le numérateur, mais factorisation est cher ... et intraitable si les seuls facteurs sont grands nombres premiers.)

+0

ok, alors maintenant im créer une nouvelle fraction et assigner la valeur de la méthode, mousse sur la création d'une nouvelle matrice une entrée de cette valeur sur la matrice –

+0

privé statique Fraccion nueva; Fraccion [] [] nuev = nouveau Fraccion [cuantos] [cuantos]; nueva = matrice [i] [j] .producto_con (tmp [i] [j + 1]); nuev [i] [j] = nueva; –

+0

C'est peut-être correct. Essaye-le. –