Я создаю класс в 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++;
}
}
Это происходит даже тогда, когда я испытываю очень маленькие матрицы, поэтому она должна быть проблема с мой код, но я не могу понять, что это такое. Спасибо за вашу помощь!
Попробуйте заменить петли while на петли - для (int i = 0; ... и т. Д. –
Мне нужно сбросить переменные a и b после каждого внутреннего цикла, который, как я полагаю, не смог бы сделать, используя for loop, поскольку переменные for для цикла работают только внутри цикла – abeta201
Как я уже сказал, попробуйте ... –