下面代码编译无错误,运行时为什么会出错?应该如何修改呢?
用的是eclipse,可是看不太懂提示信息.
出错信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Point.main(Point.java:32)
期待大家的帮助~!import java.util.Random;public class Point {
private int _x; //横坐标
private int _y; //纵坐标

public Point() {} //默认无参构造函数 public Point(int x, int y) { //自定义的构造函数
_x = x;
_y = y;
}
public String GetPoint() {
String s = "点:(" + _x + "," + _y + ") " ;
return s;
} public double GetDistance() { //获取点到原点的距离
double distance;
distance = Math.sqrt(_x * _x + _y * _y);
return distance;
} public static void main(String[] args) {
int[] t = new int[20];
Random rand = new Random();
for (int i = 0; i < 20; i++) {
t[i] = rand.nextInt(10); //数组t中存放20个0-9的整数
}
Point[] p = {}; //数组p中存放10个Point类对象
for(int i = 0; i<10; i++) {
 p[i] = new Point(t[2*i],t[2*i+1]);
}
double[] dis = new double [10];
for(int i = 0; i<10; i++){
dis[i] = p[i].GetDistance(); //数组dis中的下标对应于p中Point对象的下标
}
double[] _dis = new double[10]; //将数组dis拷贝一份给数组_dis
for(int i = 0; i<10; i++){
_dis[i] = dis[i];
}
sort(_dis);
for(int i = 0; i<10; ++i) //排序后数组的下标
for(int j=0; j<10; ++j){ //排序前数组的下标
if(_dis[i] == dis[j]){ //获取排序前的下标
System.out.println(p[j].GetPoint() + "到原点的距离为: " + p[j].GetDistance());
}
}
}
static void sort(double a[]) {
int n = a.length;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (a[j] > a[j + 1]) {
double temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}

解决方案 »

  1.   

    数组索引越界了
    Point[] p = {};    
    这个数组根本没有元素,    static void sort(double a[]) {
            int n = a.length;
            for (int i = 0; i < n - 1; i++)
                for (int j = i + 1; j < n; j++)
                    if (a[j] > a[j + 1]) {
                        double temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
        }这段也会有错