Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
矩阵计算不起作用。。。非常奇怪的Java输出_Java_Math_Matrix - Fatal编程技术网

矩阵计算不起作用。。。非常奇怪的Java输出

矩阵计算不起作用。。。非常奇怪的Java输出,java,math,matrix,Java,Math,Matrix,这就是当A是一个正方形矩阵时我想要做的 p-是力量。 A和B是方阵 用户将被要求输入矩阵A的大小、矩阵A的元素以及他们希望将矩阵提升到的功率。 一旦他们输入了什么功率,我的程序应该计算什么元素: (假设P=5) ^5+A^4+A^3+A^2+A 我写了一个增加矩阵的方法,一个将矩阵相乘的方法,一个将矩阵提升到幂的方法,它们都能正常工作 我遇到的问题是我在上面展示的最后一步^5+A^4+A^3 这就是问题变得更奇怪的地方,我的程序在矩阵中的元素都相同的情况下工作。。。以至于 2 2 2 2 2 2

这就是当A是一个正方形矩阵时我想要做的

p-是力量。 A和B是方阵

用户将被要求输入矩阵A的大小、矩阵A的元素以及他们希望将矩阵提升到的功率。 一旦他们输入了什么功率,我的程序应该计算什么元素: (假设P=5)

^5+A^4+A^3+A^2+A

我写了一个增加矩阵的方法,一个将矩阵相乘的方法,一个将矩阵提升到幂的方法,它们都能正常工作

我遇到的问题是我在上面展示的最后一步^5+A^4+A^3

这就是问题变得更奇怪的地方,我的程序在矩阵中的元素都相同的情况下工作。。。以至于

2 2 2
2 2 2
2 2 2
matrix会给我正确的输出,但是

1 2 3
4 5 6
7 8 9
矩阵将给我错误的输出,我不知道为什么

这就是问题发生的方法

public static void addPowers(int [][] a, int[][] b, int p) {
    while( p != 1){
        b = addMatrices(powerMatrix(a,p), b)  ;
        addPowers(a,b,p-1) ;
        return ;
    }
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) 
                System.out.print(b[i][j] + "\t") ;
                System.out.println();
        }

}
publicstaticvoidaddpowers(int[]a、int[]b、int-p){
while(p!=1){
b=加法矩阵(幂矩阵(a,p),b);
addPowers(a、b、p-1);
返回;
}
for(int i=0;i

以防万一,我之所以在while循环下使用递归,是因为它不会反复打印

谢谢你抽出时间!:)

编辑:更多澄清信息。 AddMatrix是一种将具有两个int[]]参数的矩阵相加的方法。 powerMatrix是一种查找具有(int[][],int)参数的矩阵的幂的方法

编辑正在调用的方法

public static int[][] multiplyMatrices(int matrixA[][], int matrixB[][]) {
    int temp[][] = new int[matrixA.length][matrixB.length];
    int matrix[][] = new int[matrixA.length][matrixB.length]; 
    int sum = 0 ;

    for (int i = 0; i < matrixA.length; i++)
    {
        for (int j = 0; j < matrixB.length; j++) 
        {
            for (int l = 0; l < matrixA.length; l++)
            {
                sum += matrixA[i][l] * matrixB[l][j] ;
            }
            temp[i][j] = sum ;
            sum = 0 ;
        }
        }
    matrix = temp;
    return matrix ;
}


public static int[][] addMatrices(int matrixA[][], int matrixB[][]) {
    int temp[][] = new int[matrixA.length][matrixB.length]; 
    int sum = 0 ;

    for (int i = 0; i < matrixA.length; i++)
    {
        for (int j = 0; j < matrixB.length; j++) {
            {
                sum = matrixA[i][j] + matrixB[i][j] ;
            }
            temp[i][j] = sum ;
        }
    }
    return temp ;
}


public static int[][] powerMatrix (int[][] a, int p) {
    int[][] result = a;
    for (int n = 1; n < p; n++)
        result = multiplyMatrices(result, a);
    return result;
}
公共静态int[][]多矩阵(int-matrixA[]],int-matrixB[]]{
int temp[][]=新的int[matrixA.length][matrixB.length];
整数矩阵[][]=新整数[matrixA.length][matrixB.length];
整数和=0;
for(int i=0;i
addMatrix
方法中,应该删除第三个循环

像这样:

for (int i = 0; i < matrixA.length; i++) {
    for (int j = 0; j < matrixA[i].length; j++) {
        temp[i][j] = matrixA[i][j] + matrixB[i][j] ;
    }
}
for(int i=0;i
“以防万一,我在while循环下使用递归的原因是它不会反复打印”——这很愚蠢。只需将计算和打印分离到各自的方法中即可。有关详细信息,请提供您的
powerMatrix()
方法。在
addPowers()
方法中,您应该将
while
更改为
if
,尽管它不会因为
return
语句而导致问题。我发现这样做更容易@user2357112就是一切。矩阵B从何而来?@Pants:至少使用
if
而不是
while
。你实际上没有循环。@好吧,那么我想至少你的
addMatrix
方法在添加两个矩阵时出错了,你需要两个循环,而不是我对@user2357112说的三个循环。。。它看起来很有趣,但它起作用了,我很懒,从我的多重矩阵方法中复制粘贴。我清理了它,但问题仍然存在。@若你们的矩阵都是相同的数字,那个么不管你们添加了哪个元素。为什么不复制我的代码并测试它呢?你的最新编辑仍然有一个问题是的!我真的不知道我是怎么搞砸的。我想这就是你试图用一种简单而懒惰的方式做事的结果。