尝试矩阵乘法时出现异常错误

Getting exception error when trying matrix multiplication

提问人:Anirudh Murali 提问时间:5/13/2023 最后编辑:John KugelmanAnirudh Murali 更新时间:5/15/2023 访问量:121

问:

当两个矩阵具有相同数量的行和列时,代码工作正常。例如。3x3 和 3x3 矩阵乘法工作正常。

尝试将不同大小的矩阵相乘时出现以下错误。尝试将 2x3 矩阵和 3x4 矩阵相乘并出现错误。

**Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
    at arrayprac.ArrayPrac.main(ArrayPrac.java:85)
38C:\Users\a807771\AppData\Local\NetBeans\Cache\17\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\a807771\AppData\Local\NetBeans\Cache\17\executor-snippets\run.xml:68: Java returned: 1
BUILD FAILED (total time: 12 seconds)**
package arrayprac;
import java.util.Scanner;

public class ArrayPrac {
 
    public static void main(String[] args) {
        
     System.out.println("Enter number of rows for matrix 1: ");
     int row1,col1,row2,col2;
     Scanner sc=new Scanner(System.in);
     row1=sc.nextInt();
     System.out.println("Enter number of Columns for matrix 1: ");
     col1=sc.nextInt();
     System.out.println("Enter number of rows for matrix 2: ");
     row2=sc.nextInt();
     System.out.println("Enter number of Columns for matrix 2: ");
     col2=sc.nextInt(); 
     int a[][]=new int[row1][col1];
     int b[][]=new int[row2][col2];
     for(int i=0;i<row1;i++)
     {
         for(int j=0;j<col1;j++)
         {
             System.out.println("Enter element for 1st matrix: ");
             a[i][j]=sc.nextInt();
         }
        
     }
     for(int i=0;i<row2;i++)
     {
         for(int j=0;j<col2;j++)
         {
             System.out.println("Enter element for 2nd matrix: ");
             b[i][j]=sc.nextInt();
         }
        
     }
     System.out.println("Below is the 1st matrix: \n");
     for(int i=0;i<row1;i++)
     {
         for(int j=0;j<col1;j++)
         {
             System.out.print(a[i][j]);
             
         }
        System.out.println("");
     }
     
     System.out.println("Below is the 2nd matrix: \n");
     for(int i=0;i<row2;i++)
     {
         for(int j=0;j<col2;j++)
         {
             System.out.print(b[i][j]);
             
         }
        System.out.println("");
     }
     
     if(col1!=row2)
     {
         System.out.println("Matrix multiplication impossible!");
         System.exit(0);
     }
     else{
         int c[][]=new int[row1][col2];
         
         for(int i=0;i<row1;i++)
         {
             for(int j=0;j<col2;j++)
             {
                 c[i][j]=0;
                 for(int k=0;k<row2;k++)
                 {
                     c[i][j]=c[i][j]+a[i][k]*b[k][j];
                 }
             }
         }
         
     System.out.println("Below is the result matrix: \n");
     for(int i=0;i<col1;i++)
     {
         for(int j=0;j<row2;j++)
         {
             System.out.print(c[i][j]);
             
         }
        System.out.println("");
     }
     }   
     
    }
    
}

当两个矩阵具有相同数量的行和列时,代码工作正常。例如。3x3 和 3x3 矩阵乘法工作正常。

尝试将不同大小的矩阵相乘时出错。尝试将 2x3 矩阵和 3x4 矩阵相乘并出现错误。

Java 数组 异常

评论

3赞 Stephen C 5/13/2023
推荐大家阅读这篇文章:如何调试小程序。关键是调试技术是>你<需要学习的东西,因为调试是程序员工作的一部分。边做边学是学习这一点的最好方法。
0赞 Amir Pashazadeh 5/15/2023
结果矩阵的大小为 x,而不是 x。当您打印出结果时,会发生异常。row1col2col1row2

答:

1赞 kautom 5/15/2023 #1

用于打印新矩阵的双精度 for 循环中的迭代边界应与用于乘法的上一个 for 循环匹配。我认为您的代码中的这种更正将使其起作用。

for(int i=0;i<row1;i++)//Here
        {
            for(int j=0;j<col2;j++)//And here
            {
                System.out.print(c[i][j]);

            }
            System.out.println("");
        }

一般来说,在这种情况下,如果在问题所在的行中设置断点,然后使用调试器会有所帮助。