class Graph{
double sideA,sideB,sideC;
public void setSide(double sideA,double sideB,double sideC){
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
}

public  boolean Boo(){
if(sideA + sideB > sideC && sideA - sideB < sideC) return true;
else return false;
}

public double Area(){
   double p = (sideA+sideB+sideC)/2;
  return  Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)); 
}

} public class Trangle { public static void main(String[] args) {
Graph[] g = new Graph[3];

g[0].setSide(1,4,6);
g[1].setSide(3,4,5);
g[2].setSide(6,8,11);


for(int i = 0;i<g.length;i++){

if(g[i].Boo())
{
System.out.println("可以构成三角形");

    System.out.println("三角形面积为:"+g[i].Area());
}

else System.out.println("不可以构成三角形");
}
  
  }
}

解决方案 »

  1.   

    为什么在g[0].setSide(1,4,6); 
    这行会抛出Exception in thread "main" java.lang.NullPointerException
    at Trangle.main(Trangle.java:42)这个错误
      

  2.   

    Graph[] g = new Graph[3];
    只分配了空间,此时g[0],g[1],g[2]的值都是null
    所以
      

  3.   

    但是我已经用下面的给他初始化了,为什么还没有值。那要怎么修改???g[0].setSide(1,4,6); 
    g[1].setSide(3,4,5); 
    g[2].setSide(6,8,11); 
      

  4.   

    g[0].setSide(1,4,6); 
    你这个是对对象设置值。
    不是对数组进行初始化
    应该是g[0] = new Graph();
    .....
    这样。
    才可以进行
    g[0].setSide(1,4,6); 
    g[1].setSide(3,4,5); 
    g[2].setSide(6,8,11); 
      

  5.   

    Graph[] g = new Graph[3]; //  ????
    Graph g=new Graph();
      

  6.   

    你这个叫初始化吗?
    你那样就相当于null.setSide(1,4,6);........
    你觉得这样合理不?
    g[0] = new Graph();
    g[0].setSide(1,4,6);
    .....
    或者在声明数组的时候就直接给数组的元素赋值了
    Graph[] g = new Graph[]{new Graph(), new Graph(), new Graph()};
      

  7.   

    Object [] o=new Object[10];//这句是实例化了一个数组对象,并规定这个数组的每个元素都只能是Object或者其子类。
    这时,o[0]仍然为null,你必须要做第二次new,如下:
    o[0]=new Object();这样,o[0]才不为空,才可以调用方法。
    注意,这里有一个小窍门,如果是new Object[],也就是后面跟的中括号,说明是在new数组对象,如果后面跟小括号,那才是在new一个实例对象。