我正在为AP Comp Sci开发一个包含矢量类和四边形类的实验室。向量类构造向量,四边形类从4个向量构造四边形,然后应该对四边形的类型进行分类。要做到这一点,我正在使用像
这样的代码测试每个单独的形状public boolean isParallelogram()
{
if(side1.isParallel(side3) && side2.isParallel(side4))
{
return true;
}
else
{
return false;
}
}
然后,当它返回到四边形的分类时,我无法使用这些方法以及它们返回的内容,因为“非静态方法__________不能在静态上下文中引用”。如果我无法访问这些方法,我怎么能对它进行分类,因为那个四边形对象总是不存在?这是我目前的分类方法,
public static String classify()
{
System.out.print("quadrilateral");
return "quadrilateral";
if(Quadrilateral.isParallelogram() == true)
{
System.out.print(" - parallelogram");
return " - parallelogram";
}
}
答案 0 :(得分:1)
static
个方法。我相信你有一个类Vector。您可以使用类Quadrilateral
之类的内容:
public class Quadrilateral {
private List<Vector> sides;
public Quadrilateral(List<Vector> sides){
this.sides = sides;
}
// Have non-static methods
public classify() {}
public isParallelogram() {}
}
现在,您在其他类中实例化Quadrilateral
和Vector
类,并使用它们:
Vector side1 = new Vector()
Vector side2 = new Vector() // create two more vector objects
Quadrilateral quadrilateral = new
Quadrilateral(Arrays.asList(side1,side2,side3,side4));
然后你可以在这个四边形对象上调用classify()
。希望这会有所帮助。
答案 1 :(得分:0)
如果要直接从类调用方法,则应将其声明为static
:
public static boolean isParallelogram()
但是,如果方法不是与类关联,而是与单个对象关联,则需要首先实例化对象(在这种情况下,您的方法 确实如此不需要 成为static
)。
Quadrilateral quad = new Quadrilateral(); //instantiate first
if(quad.isParallelogram()){
//do whatever
}
对我来说isParallelogram()
看起来不像是一个类方法,所以你可以选择第二个opotion,即在调用它的方法之前先实例化对象。
但如果classify
是类Quadrilateral
的行为。然后看起来像:
//Assuming this method checks itself whether it is a quadtrilateral or parallelogram
public String classify() //no static declaration
{
if(this.isParallelogram()){ //apply the check on itself
System.out.print("parallelogram");
return "parallelogram";
}
else{
System.out.print("quadrilateral");
return "quadrilateral";
}
}