本人Java菜鸟,请高手赐教
程序不能运行,Eclipse显示Exception in thread "main" java.lang.NullPointerException
at Pro.main(Pro.java:23)
public class Pro {
class Point{
int x;
int y;
public int retx(){
return x;
}
public int rety(){
return y;
}
public Point(){
x=(int)Math.random();
y=(int)Math.random();
}
}
public static void main(String arg[]){
int a,b;
int i,j,temp;
Point[] array=new Point[10];
int[] array1=new int[10];
for(i=0;i<10;i++){
a=array[i].retx();
b=array[i].rety();
array1[i]=(int) Math.sqrt((int) (Math.pow(a,2)+Math.pow(b,2)));
}
for(i=0;i<10;i++){
for(j=1;j<10-i;j++){
if(array1[i]>array1[j]){
temp=array1[i];
array1[i]=array1[j];
array1[j]=temp;
}
}
for(i=0;i<10;i++){
System.out.print(array[i]+" ");
}
}
}
}

解决方案 »

  1.   

    你要把Point这个类需要进行赋值.java没有办法赋默认值.
      

  2.   

    我有一个构造函数Point()来赋值,那不是定义对象时自动调用的吗
      

  3.   

    关键是你没调用这个构造函数point()来赋值啊
    Point[] array=new Point[10]; 只是定义了十个Point对象数组
    但是没有赋值
      

  4.   

    你这里的
     Point[] array=new Point[10]; 
    实际上是创建一个数组,指定数组长度为10构造方法是在实例化一个对象的时候调用,也就是当你对一个类对象进行new操作的时候,就会执行构造函数。
    class A {
      private int x;
      private int y;  public A(){
        this.x = x;
        this.y = y;  }}public class B {
      public static void main(String[] args) {  //使用new进行实例化时,会自动调用构造函数
      A a = new A();  }
    }
      

  5.   

    public class Pro { 
               class Point{ 
    int x; 
    int y; 
    public int retx(){ 
    return x; 

    public int rety(){ 
    return y; 

    public Point(int x,int y){           //错误3
    x=(int)Math.random(); 
    y=(int)Math.random(); 

                } 
    public static void main(String arg[]){ 
    int a,b; 
    int i,j,temp; 
    Point[] array=new Point[10]; ///错误1
    int[] array1=new int[10]; 
    for(i=0;i <10;i++){ 
    a=array[i].retx();            ///这里错误2
    b=array[i].rety(); 
    array1[i]=(int) Math.sqrt((int) (Math.pow(a,2)+Math.pow(b,2))); 

    for(i=0;i <10;i++){ 
    for(j=1;j <10-i;j++){ 
    if(array1[i]>array1[j]){ 
    temp=array1[i]; 
    array1[i]=array1[j]; 
    array1[j]=temp; 


    for(i=0;i <10;i++){ 
    System.out.print(array[i]+" "); 



    }
    -----------------------------------------
    看我注释,首先看错误1,因为在注释为"错误1"那个只是创建了一个Point类型,长度为10的数组对象array,但是该数组对象没有初始化,所以array是指向空的,即null。在“错误2”中,你对一个为null(即空指向的对象)的array[i]赋值当然会出错.
    --------------
    按我下面这样改
    import java.util.Random;import com.sun.java_cup.internal.production;public class Pro { 

     public class Point{ 
    int x; 
    int y; 
    public int retx(){ 
    return x; 

    public int rety(){ 
    return y; 

    public Point(int x,int y){ 
    this.x=x;
    this.y=y;} 
                } 
    public static void main(String arg[]){ 
    int a,b; 
    int i,j,temp; 
    int ranvaluex=0;
    int ranvaluey=0;
    Pro p=new Pro();
    Pro.Point[] array=new Point[10];
    int[] array1=new int[10]; 
    Random r=new Random();for(i=0;i <10;i++){ 
    ranvaluex=r.nextInt();
    ranvaluey=r.nextInt();
    array[i]=p.new Point(ranvaluex,ranvaluey);
    a=array[i].retx();
    b=array[i].rety();
    array1[i]=(int) Math.sqrt((int) (Math.pow(a,2)+Math.pow(b,2))); 

    for(i=0;i <10;i++){ 
    for(j=1;j <10-i;j++){ 
    if(array1[i]>array1[j]){ 
    temp=array1[i]; 
    array1[i]=array1[j]; 
    array1[j]=temp; } 

    for(i=0;i <10;i++){ 
    System.out.print(array1[i]+" "); 



    }
      

  6.   

    java 也是调用构造函数来设定类的成员值啊,不过你定义那个Point的是数组对象,还没有为这个数组对象逐个实例化,没有实例化,就意味着引用是null的,就跟c++中的空指针一样,你先实例化了这个数组中的每一个point对象就可以运行了.
    你原来的代码是为一个空指针的声明赋值,就好像你在c++中为一片没有内存地址的"内存单元"赋值一样
      

  7.   


    Point[] array=new Point[10]; //这只是说有这么一个数组。里面应该是没有东西的。说下原因,你在这里用到了内部类,应该注意一点,内部类是不能在外部类的静态方法里被实例化的。你说的构造方法是自动条用是没有错的,你这里的也自动调用了。但是没用。所以,我把你的代码改了下。这样是可以的,不知道是否何你的意?public class Pro {

    class Point {
    int x;
    int y; public int retx() {
    return x;
    } public int rety() {
    return y;
    } public Point() {
    x = (int) Math.random();
    y = (int) Math.random();

    }

    } public static void main(String arg[]) {
    int a, b;
    int i, j, temp;
    //Point[] array = new Point[10];
    Pro p = new Pro();
    int[] array1 = new int[10];
    for (i = 0; i < 10; i++) {
    Pro.Point point = p.new Point();
    //a = array[i].retx();
    //b = array[i].rety();
    a = point.retx();
    b = point.rety();
    array1[i] = (int) Math
    .sqrt((int) (Math.pow(a, 2) + Math.pow(b, 2)));
    }
    for (i = 0; i < 10; i++) {
    for (j = 1; j < 10 - i; j++) {
    if (array1[i] > array1[j]) {
    temp = array1[i];
    array1[i] = array1[j];
    array1[j] = temp;
    }
    }
    for (i = 0; i < 10; i++) {
    System.out.print(array1[i] + " ");
    }
    }
    //这里测试你的构造方法是否被调用了。
    /*

    Pro pro = new Pro();
    Pro.Point point = pro.new Point();
    System.out.println(point.x);
    System.out.println(point.y); */
    }
    }
      

  8.   

    难解.试了好几次了.貌似你没哟main方法. 
      

  9.   

    LZ写的是内部类,没必要用内部类建议:
    for(int p; p < array.length; p++){
      array[p] = new Point();
    }
      

  10.   

    为什么要用阿array呢?有一点貌似很多人忘记了[]也是C和c++的遗留物,他们压根不知道 比如你写了一句 int a[] = new int[10];实际上就是 你new了一个array,然后规定array里只允许放int,如果你不放东西进去,他当然是null。尽量少用int int[]之类的,不是有Integer等可以使用的嘛OOP严格来说没有基本数据类型的
      

  11.   


    问题出在Point[],不是int[].
    java中的ArrayList底层实现也是数组,不认为用数组就是面向过程了.回到这个问题上来,可不可以这样理解:
    List<Point> list = new ArrayList<Point>();

    Point[] array = new Point[10];
    是等效的. list是空的,只不过是没有大小的限制而已.