2015-10-27 2 views
3

Я создаю класс в Java для выполнения простых операций с матрицами с использованием двумерных массивов, и у меня возникает проблема с моим методом для матричного умножения. Всякий раз, когда я проверяю свой метод .multiply, ошибки не возникает, но загрузка моего компьютера сильно возрастает, и моя программа-тестер никогда не заканчивается.Матричное умножение в Java-проблемах

Это мой .multiply метод:

/** 
* Multiplies the first matrix by the entered one 
* Assumes width of first matrix and height of second are the same 
* @param toMultiply: Matrix by which to multiply 
* @return product: The first matrix multiplied by the entered one 
*/ 
public Matrix multiply(Matrix toMultiply) 
{ 
    Matrix product = new Matrix(height,toMultiply.width); 
    int a = 0, b = 0, n = 0; 
    double value = 0; 
    while(a < height) 
    { 
     while(b < toMultiply.width) 
     { 
      while(n < width) 
      { 
       value += matrixArray[a][n] * toMultiply.matrixArray[n][b]; 
      } 
      product.matrixArray[a][b] = value; 
      value = 0; 
      n = 0; 
      b++; 
     } 
     b = 0; 
     a++; 
    } 
    return product; 
} 

Где построить матрицу следующим образом:

private double[][] matrixArray; 
private int width; 
private int height; 
/** 
* Constructs a matrix with the specified width and height 
* @param widthOfMatrix 
* @param heightOfMatrix 
*/ 
public Matrix(int heightOfMatrix,int widthOfMatrix) 
{ 
    height = heightOfMatrix; 
    width = widthOfMatrix; 
    matrixArray = new double[height][width]; 
} 

/** 
* Enters values into the matrix 
* @param entries: Each value in a matrix separated by a comma 
*/ 
public void enter(double... entries) 
{ 
    int a = 0, b = 0; 
    while(a < height) 
    { 
     while(b < width) 
     { 
      matrixArray[a][b] = entries[b + a*width]; 
      b++; 
     } 
     b = 0; 
     a++; 
    } 

} 

Это происходит даже тогда, когда я испытываю очень маленькие матрицы, поэтому она должна быть проблема с мой код, но я не могу понять, что это такое. Спасибо за вашу помощь!

+2

Попробуйте заменить петли while на петли - для (int i = 0; ... и т. Д. –

+1

Мне нужно сбросить переменные a и b после каждого внутреннего цикла, который, как я полагаю, не смог бы сделать, используя for loop, поскольку переменные for для цикла работают только внутри цикла – abeta201

+1

Как я уже сказал, попробуйте ... –

ответ

1

Вы не увеличиваете n в своей внутренней петле n. Как уже упоминалось выше, для циклов более целесообразно при циклическом задании определенного количества раз.

+0

Спасибо, это исправлено. Удивительно, как если бы вы уставились на свой код достаточно долго, вы можете пропустить такие простые вещи. – abeta201

+0

aye, свежие глаза хорошие :) – DomJack