-3

我收到这个错误说

java.lang.ArrayIndexOutOfBoundsException: 2
    at J4.writefile(J4_2_MultiDimensionalArray7.java:30)
    at J4.main(J4_2_MultiDimensionalArray7.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

这个错误是什么意思?我的程序是将程序生成的坐标写入另一个文件。该程序编译但它不运行。我该如何解决这个错误?

谢谢!

继承人的代码:

import java.io.*;
import java.util.Arrays;

public class J4
{
    public static void main (String [] args) throws IOException
    {
        int numpoints = 100, dimension = 2, length = 100;//numpoints is set to 100, dimension is set to 2, length is set to 100

        //arrays are initializewd and declared
        double [] lengthscale = new double [dimension];
        double [][] locations = new double [numpoints][dimension];

        PrintWriter fileOut = new PrintWriter (new FileWriter ("arrayNumPoints.txt"));

        writefile(lengthscale, locations, numpoints, dimension, length);


        for(int m=0; m <length; m++){//for loop
            fileOut.println(Arrays.toString(locations[m]) + ", ");//writes to file
        }
        fileOut.close ();//close file

    }//end main

    public static Double writefile(double lengthscale[], double locations[][], int dimension, int numpoints, int length)throws IOException
    {

        for (int a = 0; a < dimension; a++){//for loop runs while a is less than dimension
            lengthscale[a] = length;//stores array
        }//end for loop

        for (int x=0; x < numpoints; x++){//for loop runs while x is less than numpoints
            for (int y=0; y < dimension; y++){//nested for loop runs while y is less than dimension
                locations [x][y]= (2 * Math.random() - 1) * lengthscale[y];//creates the range and choses random point within 
                return locations[x][y];

            }//end nested for loop
        }//end for loop

        //if program doesnt run through loop.. alternative return statement (but
        double b= 1;    
        return b;
    }//end writefile methos
}//end 

为什么会这样?

4

2 回答 2

2

代替

for (int a = 0; a < dimension; a++) {// for loop runs while a is less than dimension
  lengthscale[a] = length;// stores array
}// end for loop

for (int a = 0; a < lengthscale.length; a++) {// for loop runs while a is less than dimension
  lengthscale[a] = length;// stores array
}// end for loop

您不能确保“维度”是数组的实际长度,但可以确定 array.length 是

然而,你的错误的根本原因是你有这个:

writefile(lengthscale, locations, numpoints, dimension, length);

但这就是您定义该方法的方式:

writefile(double lengthscale[], double locations[][], int dimension,
      int numpoints, int length)

您正在用 numpoints 交换维度。

您可以将代码替换为:

..
    PrintWriter fileOut = new PrintWriter(new FileWriter("arrayNumPoints.txt"));
    writefile(lengthscale, locations, dimension, numpoints, length);
    for (int m = 0; m < length; m++) {// for loop
...
于 2013-09-23T23:06:26.770 回答
0

即使没有看到您的代码,我也可以告诉您您正在尝试访问2数组的索引。因为它超出了范围,所以数组的长度必须2小于或等于。请记住,有效的数组索引是0through length - 1

于 2013-09-23T22:59:42.827 回答