变量不初始化java

时间:2015-03-23 23:40:11

标签: java variables matrix initialization

第38行 -

pool.submit(new Multi(N,i,j,a,b,c));

我有一个未初始化的变量j。我不确定所有其他人已经初始化的错误,这一直困扰着我过去一小时。

请有人帮我解决此错误吗?

public class Matrix1 
{       
    public final static int N = 4; //Random size of matrix

    public static void main(String[] args) throws InterruptedException 
    {           
        long startTime = System.currentTimeMillis();

        //Create and multiply matrix of random size N.   
        double [][] a = new double [N][N];
        double [][] b = new double [N][N];
        double [][] c = new double [N][N];          
        int i,j,k;

        for(i = 0; i < N ; i++)
            for(j = 0; j < N ; j++)
            {
                a[i][j] = i + j;
                b[i][j] = i * j;
            }

        ExecutorService pool = Executors.newFixedThreadPool(1);

        for(i = 0; i < N; i++)
            for(j = 0; j < N; j++)
            {
                c[i][j] = 0;

                for(k = 0; k < N; k++)
                   c[i][j] += a[i][k] * b[k][j]; //C matrix calculated from a and B matrices.               
            }  

        pool.submit(new Multi(N,i,j,a,b,c));
        pool.shutdown();
        pool.awaitTermination(1, TimeUnit.DAYS);

        long endTime = System.currentTimeMillis();

        System.out.println("Calculation completed in " +
        (endTime - startTime) + " milliseconds");       
    }

    static class Multi implements Runnable 
    {
        final int N;
        final double [][] a;
        final double [][] b;
        final double [][] c;
        final int i;
        final int j;

        public Multi(int N, int i, int j, double[][] a, double[][] b, double[][] c)
        {
            this.N=N;
            this.i=i;
            this.j=j;
            this.a=a;
            this.b=b;
            this.c=c;
        }

        @Override
        public void run() 
        {
            for(int k = 0; k < N; k++) 
                c[i][j] += a[i][k] * b[k][j];
        }       
    }   
}

1 个答案:

答案 0 :(得分:1)

您试图在其循环之外访问虚拟变量j。请尝试以下代码:

for (i = 0; i < N; i++) {

    for (j = 0; j < N; j++) { 
        c[i][j] = 0;

        for (k = 0; k < N; k++) {
            c[i][j] += a[i][k] * b[k][j]; // C matrix calculated from a and B matrices.
        }

        pool.submit(new Multi(N,i,j,a,b,c));
        pool.shutdown();
        pool.awaitTermination(1, TimeUnit.DAYS);
    }
}