如何在线程“main”java.lang.NullPointerException中解决Exception

时间:2014-02-07 11:46:20

标签: java nullpointerexception

我创建了两个类

但我有问题

当我按下运行时,它显示我这个错误

----jGRASP exec: java client

Exception in thread "main" java.lang.NullPointerException
    at client.main(client.java:7)

----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.

线程“main”中的异常java.lang.NullPointerException<<我知道这是什么意思

但我不知道如何更正我的代码!

这是头等舱

class circle{
  private double radius;
  static int count=0;
    public circle(){
        radius=8.9;
    }
    public circle(double r){
        radius=r;
        count++;
    }
    public void setradius(double r){
        radius = r;
    }
    public double getradius(){
        return radius;
    }
    public double area (){
        double area1 = (radius*radius*(Math.PI));
        return area1;
    }
    public double circumference(){
        double circumference1 = (Math.PI)*radius;
        return circumference1;
    }
    public static double areas(double r){
        double area2 = (r*r*(Math.PI));
        return area2;
    }
}

这是第二个

class client{

   public static void main (String args[]){
      circle array[] = new circle [10];
          for (int i = 0 ; i<10 ; i++){
            array [i]= new circle (i++);
            System.out.println("The area of the circle of radius "+ array[i].getradius()+"is" + array[i].area() + "and the circumference is" + array[i].circumference());
            System.out.println(circle.areas(35));
          }
    }
}

6 个答案:

答案 0 :(得分:2)

您在循环中递增i两次:

for (int i = 0 ; i<10 ; i++){
    array [i]= new circle (i++);

结果是您尝试访问数组中尚未初始化的圆圈(所有数组内容最初都指向NULL)。我确定你的意思是写

for (int i = 0 ; i<10 ; i++){
    array [i]= new circle (i + 1);

答案 1 :(得分:2)

您正在i循环中递增for并初始化每个圈子:

for (int i = 0 ; i<10 ; i++){
    array [i]= new circle (i++);

当您输出圆圈时,您将引用未初始化的数组条目。

您需要删除其中一个:

for (int i = 0 ; i<10 ; i++){
    array [i]= new circle (i+1);
    System.out.println("The area of the circle of radius "+ array[i].getradius()+"is" + array[i].area() + "and the circumference is" + array[i].circumference());
    System.out.println(circle.areas(35));
}

答案 2 :(得分:2)

这可能是您的解决方案:

class client{

   public static void main (String args[]) {
        circle c[] = new circle[10];
        for (int i = 0 ; i<10 ; i++) {
            c[i] = new circle(i + 1);
            System.out.println("The area of the circle of radius "+ c[i].getradius()+"is" + c[i].area() + "and the circumference is" + c[i].circumference());
            System.out.println(c[i].areas(35));
        }
    }
}

答案 3 :(得分:1)

因为这一行将i的值增加1.并且后面的行使用数组中的下一个空位置。

array [i]= new circle (i++);
System.out.println("The area of the circle of radius "+ array[i].getradius()+"is" + array[i].area() + "and the circumference is" + array[i].circumference());

答案 4 :(得分:1)

  array [i]= new circle (i++);
你算上一个人了。但是下一个i值是null。

答案 5 :(得分:1)

问题在于这一行:

array[i] = new circle(i++);

您正在再次添加i + 1.

这样做:

array[i] = new circle(i);