无法从静态上下文引用java非静态方法toString
我试图创建一个程序,读取用户输入并存储它,然后计算多边形的面积。当我试着编译它时,它给了我一个关于.toString
是非静态的错误
import java.util.Scanner;
class regularpoTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean finished = false;
double s;
double n;
double area;
//starts loop to record data
do {
s =0;
n =0;
System.out.println("Enter the side length, or anything else to quit: ");
s = in.nextDouble();
in.nextLine();
if (in.hasNextDouble()) {
System.out.println("Enter number of sides");
n = in.nextDouble();
area = (s*s*n)/(4*Math.tan(Math.PI/n));
} else {
finished = true;
}
} while(!finished);
//This prints out the student details
System.out.println(regularpo.toString());
}
}
public class regularpo {
private double side;
private double numberOf;
private double area;
public regularpo(double side, double numberOf){
side = 0;
numberOf = 0;
area = 0;
}
public double getSide(){
return side;
}
public double getNumberOf(){
return numberOf;
}
public String toString(){
return ("area = " + area+ " side length "+side+ " number of sides "+numberOf);
}
}
# 1 楼答案
您正在尝试调用一个类的方法,而该方法是为该类实例的方法定义的(并且仅作为该类实例的方法定义)。也许您的意思是为该类创建一个对象,并调用其
toString
方法,尽管我不能从您的代码中确定# 2 楼答案
建议:
1)取消“定期测试”。只需将“main()”移动到“regularpo”
2)大写“RegularPo”(按照惯例,类名应以大写字母开头)
3)让RegularPo构造函数实际保存初始值(而不仅仅是将其设置为零)
。。。最重要的是
4)您的main应该调用
RegularPo regularPo = new RegularPo (...)
。 然后引用对象实例“regularPo”# 3 楼答案
尝试创建类
regularpo
的对象,并在该对象上调用toString
此外,按照惯例,类名必须以大写字母开头,因此将类命名为
Regularpo
# 4 楼答案
toString()是regularpro类中的一个非静态方法,我们知道非静态方法属于一个对象,所以我们需要创建和调用同一类的对象
toString()属于对象类,因此它是非静态方法
regularpo obj=新的regularpo(); obj。toString()
# 5 楼答案
您不能使用
classname.nonStaticMethodName
访问非静态方法。您需要使用new
关键字实例化对象。基本上,您可以通过regularpo r = new regularpo(2.0, 2.0)
创建对象的实例。之后,您可以调用r.toString();
查看此SO-question了解更多信息
这个Oracle-tutorial很好地解释了类成员