Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组索引外错误-jacobi方法的实现 公共类测试运行{ 公共静态双椭圆(浮点x,浮点y){ 双经验; exp=(-2)*数学exp(数学功率((y-(.35*6.5)),2)-数学功率((x-(.75*8)),2)/(2*.05*6.5)); 返回经验; } 公共静态void jacobi(){ int ny=80; int nx=80; double[]p=新的double[100][100][100]; 对于(int i=0;i_Java_Arrays_Indexing - Fatal编程技术网

Java 数组索引外错误-jacobi方法的实现 公共类测试运行{ 公共静态双椭圆(浮点x,浮点y){ 双经验; exp=(-2)*数学exp(数学功率((y-(.35*6.5)),2)-数学功率((x-(.75*8)),2)/(2*.05*6.5)); 返回经验; } 公共静态void jacobi(){ int ny=80; int nx=80; double[]p=新的double[100][100][100]; 对于(int i=0;i

Java 数组索引外错误-jacobi方法的实现 公共类测试运行{ 公共静态双椭圆(浮点x,浮点y){ 双经验; exp=(-2)*数学exp(数学功率((y-(.35*6.5)),2)-数学功率((x-(.75*8)),2)/(2*.05*6.5)); 返回经验; } 公共静态void jacobi(){ int ny=80; int nx=80; double[]p=新的double[100][100][100]; 对于(int i=0;i,java,arrays,indexing,Java,Arrays,Indexing,您将获得数组索引越界异常,因为在您的循环中: public class testrun { public static double ellipticalequn(float x, float y){ double exp; exp=(-2)*Math.exp(Math.pow((y-(.35*6.5)),2)-Math.pow((x-(.75*8)),2)/(2*.05*6.5)); return exp; }

您将获得数组索引越界异常,因为在您的循环中:

public class testrun {


    public static  double ellipticalequn(float x, float y){
         double exp;
         exp=(-2)*Math.exp(Math.pow((y-(.35*6.5)),2)-Math.pow((x-(.75*8)),2)/(2*.05*6.5));
         return exp;
     }
     public static void jacobi(){
         int ny=80;
        int nx=80;
         double[][][] p=new double[100][100][100];
         for(int i=0;i<100;i++){p[i][i][0]=0;} //initialise
         for(int i=0;i<nx;i++){
             p[0][i][0]=10;                 //Boundary conditions
             p[79][i][0]=10;
             p[i][79][0]=50;
             p[i][0][0]=50;

        }
         boolean loop=true;
         int k=0;
         while(loop){
             double error=0;
             for(int i=1;i<nx-1;i++){
                 for(int j=1;j<ny-1;j++){
                     p[i][j][k]=0.25*((p[i-1][j][k]+p[i+1][j][k]+p[i][j+1][k]+p[i][j-1][k])-ellipticalequn((float)i,(float)j));
                     error+=Math.pow(p[i][j][k],2);
                 }
             }
             error=Math.sqrt(error);
             k++;
             if(k>50){
                 loop=false;}

             if(error<(10^(-8))){loop=false;}
             else { loop=true;}
         }
     }

     public static void main(String[] args){
            jacobi();

        }
}
第二,检查错误后,再次检查k是否不大于100:

if(k>50){
   loop=false;
   break;
}

if(error)错误是什么,请您也发布错误好吗?如果您花了3个小时试图解决问题,请再花几分钟发布stacktrace…我强烈建议清理您的代码一些-缩进不一致,有些地方(如设置
p[I][j][k]
)如果不是单独的方法,那应该至少分成单独的行,并且有很多。也没有注释。如果我们在理解代码时遇到困难,就很难提供帮助。如果您使用像eclise这样的工具,请尝试调试。另外,stacktrace会告诉您在什么时候抛出了行错误,因此通过放置de进行调试tat周围的bug指针可能会有所帮助。
if(k>50){
   loop=false;
   break;
}
if(error<(10^(-8)))
    loop=false;
else if(k < 100)
    loop=true;