有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java实现jacobi算法实现laplace方程

该算法遍历一个2D NxN数组,使每个元素成为其周围4个相邻元素(左、右、上、下)的平均值

NxN数组最初为全零,并由一个边距包围,边距为1,如中所示 下面是一个例子。1永远不会改变,0一点一点地增加

             1 1 1 1 1 1 1 1
             1 0 0 0 0 0 0 1
             1 0 0 0 0 0 0 1
             1 0 0 0 0 0 0 1
             1 0 0 0 0 0 0 1
             1 0 0 0 0 0 0 1
             1 0 0 0 0 0 0 1
             1 1 1 1 1 1 1 1

我已经实现了以下代码,并且正在获取数组索引越界异常。请纠正我

my code :
       public class Main {
static int NO_OF_THREADS =8;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
      Jacobi jacobi = new Jacobi(NO_OF_THREADS);
      jacobi.initialize();
      jacobi.create_threads();
    }

  }//end of Main class

  public class Jacobi {
int ROWS=1000,COLS=1000;
private int i;
private int upper=100;//prevents buffer overflow
private int lower=99;//prevents buffer overflow
private int j;
private double[][] jacobi=new double[ROWS][COLS];
private int NO_OF_THREADS;


public Jacobi(int k)
{
    NO_OF_THREADS=k;
}

public  void initialize() {
        for(i=1;i<=upper;i++)
           {
           for(j=1;j<=upper;j++)
                 {

                       if((i==1)||(i==upper)||(j==1)||(j==upper)){
                      jacobi[i][j]=1.0;
                       }

                   else
                          jacobi[i][j]=0.0;


                 }

             }

    }
              public double[][] getJacobi()
              {
                    return jacobi;
              }

              public void create_threads()
              {
                   theThread[] threads=new theThread[NO_OF_THREADS];
                   for(int k=1;k<=NO_OF_THREADS;k++)
                   {
                       threads[k]=new theThread();
                       threads[k].start();
                    }
               }
               //Inner class of Jacobi

             class theThread extends Thread {

               @Override
              public void run()
              {
                   for(int q=2;q<=lower;q++)
                   {

                     System.out.println("The ID of this thread is: "+getName());
                     for(int j=2;j<=lower;j++)
                      {
                        synchronized(Jacobi.this)
                         {

                        jacobi[q][j]=(jacobi[q-1][j]+jacobi[q+1][j]+jacobi[q] [j-1]+jacobi[q][j+1])/4;
                         }//end of synchronized
              }//end of inner for loop


          }//end of for loop
     }
}//end of theThread class
}//end of jacobi class

共 (1) 个答案

  1. # 1 楼答案

    排队

    int ROWS,COLS=1000;
    

    我想你想把它改成

    int ROWS=1000, COLS=1000;
    

    否则ROWS设置不正确