2016-10-28 2 views
-1

두 개의 행렬을 곱하는 java 프로그램이 있습니다. 전역 오류 선언에서 오류가 발견되었습니다. 다음은 내 코드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 선언 된 전역 배열에 액세스하려고 할 때 내가 정적 무효 solveMatrix()에서 오류가 발생하고있다.

내 오류는 getMatrix() 메소드, 배열이 & b는 오히려 당신이 & B 배열의 새 로컬 사본을 작성, 사용하지 않는 인스턴스 변수 객체 때문이다

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) 
+0

에 오류 메시지를 추가를하여 문제. – talex

+0

/b/c 배열을 함수의 내부에 정적 배열로 그림자를 넣고 함수 내부의 선언에서 int [] []를 제거하십시오. –

+0

[java array nullpointer] (http://stackoverflow.com/questions/8007655/) 가능한 중복 java-array-nullpointer) – talex

답변

1

입니다.

당신은 아래에) 당신의 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(); 
      } 
     } 

    } 
관련 문제