【问题标题】:How to declare arrays globally in Java?如何在 Java 中全局声明数组?
【发布时间】:2016-10-28 17:15:09
【问题描述】:

我在 java 中有一个将两个矩阵相乘的程序。我在全局错误声明中发现了一些错误。 这是我的代码

import java.util.Scanner;

    /**WAP in Java for multiplication of two (m*n) matrices. */
    public class PracProg_7{
        static int m,n,p;
        static int a[][];
        static int b[][];
        static int c[][];
        public static void main(String[] args){
            getMatrix();
            solveMatrix();
            display();

        }
        static void getMatrix(){
            int i,j;
            System.out.println("Enter size of matrix  || Enter m,n,p");
            Scanner sc = new Scanner(System.in);
            m = sc.nextInt();
            n = sc.nextInt();
            p = sc.nextInt();
            int a[][] = new int [m][n];
            int b[][] = new int [n][p];

            System.out.println("Enter matrix A");
            for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                    a[i][j] = sc.nextInt();
                }
            }
            System.out.println("Enter matrix B");
            for(i=0;i<n;i++){
                for(j=0;j<p;j++){
                    b[i][j] = sc.nextInt();
                }
            }

        }
        static void solveMatrix(){
            int i,j,k;
            int c[][] = new int [m][p];
            for(i=0;i<m;i++) {
                for (j = 0; j < p; j++) {
                    c[i][j] = 0;
                    for (k = 0; k < n; k++) {
                        try{
                        c[i][j] += a[i][k] * b[k][j];
                    }
                    catch (ArrayIndexOutOfBoundsException e){System.out.println("Error" + e);}
                    }
                }
            }
        }
        static void display(){
            int i,j;
            for(i=0;i<m;i++){
                for(j=0;j<p;j++){
                    System.out.print(c[i][j] + "\t");
                }
                System.out.println();
            }
        }
    }

当我尝试访问全局声明的数组 a 和 b 时,静态 void solveMatrix() 出现错误。

我的错误是

Exception in thread "main" java.lang.NullPointerException
    at PracProg_7.solveMatrix(PracProg_7.java:46)
    at PracProg_7.main(PracProg_7.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

【问题讨论】:

  • 在您的问题中添加错误信息。
  • 您在函数内部声明的 a/b/c 数组会影响静态数组,从函数内部的声明中删除 int[][]
  • java array nullpointer的可能重复
  • talex 我是初学者,请不要对我的问题投反对票

标签: java arrays


【解决方案1】:

这是因为在您的 getMatrix() 方法中,未使用数组对象实例变量 a & b,而是创建了 a & b 数组的新本地副本。

您需要更改 getMatrix() 中的 a 和 b,如下所示:

a= new int [m][n];
b = new int [n][p];

您可以在下面找到更新后的 getMatrix() 方法:

static void getMatrix(){
        int i,j;
        System.out.println("Enter size of matrix  || Enter m,n,p");
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();
        n = sc.nextInt();
        p = sc.nextInt();
        a= new int [m][n];
        b = new int [n][p];

        System.out.println("Enter matrix A");
        for(i=0;i<m;i++){
            for(j=0;j<n;j++){
                a[i][j] = sc.nextInt();
            }
        }
        System.out.println("Enter matrix B");
        for(i=0;i<n;i++){
            for(j=0;j<p;j++){
                b[i][j] = sc.nextInt();
            }
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多