变量未初始化java
第38行-变量未初始化java,java,variables,matrix,initialization,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) throw
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
{
公共最终静态int N=4;//矩阵的随机大小
公共静态void main(字符串[]args)引发InterruptedException
{
long startTime=System.currentTimeMillis();
//创建并乘以随机大小为N的矩阵。
double[]a=新的double[N][N];
双精度[][]b=新双精度[N][N];
double[]c=新的double[N][N];
int i,j,k;
对于(i=0;i
您试图访问其循环外部的虚拟变量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);
}
}
(i=0;i{
对于(j=0;j
第38行是哪一行?你真的希望我们在你的代码堆里数数行吗?数数行并不难,但我编辑了我的帖子。令人遗憾的是,问题在于堆栈溢出用户界面更难,因为格式化可能会导致前导行或尾随行丢失,并且您可能使用的IDE应该提供行号。是的。如果N为0,则不会将任何内容分配给j
。在这种情况下,编译器是正确的。(请注意,添加if(N>0)
检查不会修复错误,因为编译器不够聪明,不知道如何修复问题)因此,我如何解决这个问题:oCheers工作得很好!真不敢相信我错过了{