Java 无法从静态上下文引用非静态方法toString

Java 无法从静态上下文引用非静态方法toString,java,static,tostring,Java,Static,Tostring,我试图创建一个程序,读取用户输入并存储它,然后计算多边形的面积。当我尝试编译它时,它给了我一个错误,关于.toString是非静态的 import java.util.Scanner; class regularpoTest { public static void main(String[] args) { Scanner in = new Scanner(System.in); boolean finished = false;

我试图创建一个程序,读取用户输入并存储它,然后计算多边形的面积。当我尝试编译它时,它给了我一个错误,关于.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());
    
    }
}  

您正在尝试调用一个类的方法,而该方法是为该类定义的,并且仅作为该类实例的方法才有意义。也许您想为该类创建一个对象,并调用它的toString方法,尽管我无法从您的代码中确定。

您不能使用classname.nonStaticMethodName访问非静态方法。您需要使用new关键字实例化对象。基本上,通过regularpo r=newregularpo2.0,2.0创建对象的实例。之后,您可以调用r.toString

查看此以了解更多信息

这也很好地解释了班级成员。

建议:

1.取消常规测试。只需将main移动到regularpo即可

2按惯例将RegularPo大写,类名应以大写字母开头

3让RegularPo构造函数实际保存初始值,而不仅仅是将其设置为零

。。。最重要的是

4您的主要用户应该调用RegularPo RegularPo=新RegularPo。。。。
然后引用对象实例regularPo。

尝试创建一个类为regularPo的对象,并调用该对象上的字符串

regularpo obj=new regularpo();
obj.toString();

此外,按照惯例,类名必须以大写字母开头,因此将您的类命名为RegularPo

toString是regularpro类中的一个非静态方法,我们知道非静态方法属于一个对象,因此我们需要创建和调用同一类的对象

toString属于对象类,因此它是非静态方法

regularpo obj=新的regularpo;
obj.toString

您缺少regularpo的实例。按照约定,类名以大写字母开头。System.out.printlnregularpo.toString;显然regularpo是一个类名,而不是一个对象引用。toString是一个实例方法,这意味着您必须提供regularpo的实例才能使用它。而且您似乎没有在任何地方创建regularpo的实例,因此没有其他可使用的。和的可能重复项,正如Eliot所说,类名应以大写字母开头,而变量名应以小写字母开头。如果你坚持这个惯例,别人会更容易理解你的代码。嗨!谢谢你的帮助我唯一不明白的是第四点。。。我应该参加我的主课常规考试,对吗?你写了些什么,但引用实例regularPo是什么意思?容忍我刚开始的一切;
regularpo obj=new regularpo();
obj.toString();