Умножение матриц в Java - вопросы

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

Это мой метод .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++;
    }

}

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


person abeta201    schedule 27.10.2015    source источник
comment
Попробуйте заменить циклы while на циклы for -- for(int i = 0;... и т.д.   -  person Software Engineer    schedule 27.10.2015
comment
Мне нужно сбросить переменные a и b после каждого внутреннего цикла, что я не думаю, что смогу сделать с помощью цикла for, поскольку переменные цикла for работают только внутри цикла   -  person abeta201    schedule 27.10.2015
comment
Как говорится, попробуй...   -  person Software Engineer    schedule 27.10.2015
comment
Собственно, теперь мне любопытно. Как мне сбросить переменную после цикла for, который я использую внутри цикла? Я пробовал это дважды, но я не уверен, как я мог это сделать. Java не распознает увеличивающуюся переменную, если она находится вне цикла for.   -  person abeta201    schedule 27.10.2015
comment
Подождите - он будет сбрасываться каждый раз, не так ли. Мне просто нужно изменить все это, и это будет работать. Спасибо!   -  person abeta201    schedule 27.10.2015


Ответы (1)


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

person DomJack    schedule 27.10.2015
comment
Спасибо! Это исправило это. Удивительно, как если вы достаточно долго смотрите на свой код, вы можете пропустить такие простые вещи. - person abeta201; 27.10.2015