我正在尝试创建一个读取用户输入并存储它的程序,然后计算多边形的面积 当我尝试编译它时,它给了我一个关于.toSting非静态的错误
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);
}
}
答案 0 :(得分:1)
当您为该类的实例定义该方法(并且仅作为其意义)时,您正尝试调用类的方法。也许您的意思是创建该类的对象,并调用其toString
方法,尽管我无法从您的代码中确定。
答案 1 :(得分:1)
您无法使用classname.nonStaticMethodName
访问非静态方法。您需要使用new
关键字实例化对象。基本上,您可以通过regularpo r = new regularpo(2.0, 2.0)
创建对象的实例。之后,您可以调用r.toString();
查看此SO-question了解详情。
这个Oracle-tutorial很好地解释了班级成员。
答案 2 :(得分:1)
建议:
1)消除" regularpoTest"。只需移动" main()"进入" regularpo"。
2)大写" RegularPo" (按照惯例,类名应以大写字母开头)。
3)使RegularPo构造函数实际上保存初始值(不只是将它们设置为零)。
......而且,最重要的......
4)你的主人应该致电RegularPo regularPo = new RegularPo (...)
。
然后引用对象实例" regularPo"。
答案 3 :(得分:0)
尝试创建类regularpo
的对象并在该对象上调用toString
regularpo obj=new regularpo();
obj.toString();
同样根据惯例,类名必须以大写字母开头,因此将您的类命名为Regularpo
答案 4 :(得分:0)
toString()是regularpro类中的非静态方法,我们知道非静态属于一个对象,所以我们需要创建同一个类的对象并调用它。
toString()属于Object类,因此它是非静态方法。
regularpo obj = new regularpo(); obj.toString();