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("不可以构成三角形");
}
}
}
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("不可以构成三角形");
}
}
}
这行会抛出Exception in thread "main" java.lang.NullPointerException
at Trangle.main(Trangle.java:42)这个错误
只分配了空间,此时g[0],g[1],g[2]的值都是null
所以
g[1].setSide(3,4,5);
g[2].setSide(6,8,11);
你这个是对对象设置值。
不是对数组进行初始化
应该是g[0] = new Graph();
.....
这样。
才可以进行
g[0].setSide(1,4,6);
g[1].setSide(3,4,5);
g[2].setSide(6,8,11);
Graph g=new Graph();
你那样就相当于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()};
这时,o[0]仍然为null,你必须要做第二次new,如下:
o[0]=new Object();这样,o[0]才不为空,才可以调用方法。
注意,这里有一个小窍门,如果是new Object[],也就是后面跟的中括号,说明是在new数组对象,如果后面跟小括号,那才是在new一个实例对象。