有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法从静态上下文引用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);
    }
}

共 (5) 个答案

  1. # 1 楼答案

    您正在尝试调用一个类的方法,而该方法是为该类实例的方法定义的(并且仅作为该类实例的方法定义)。也许您的意思是为该类创建一个对象,并调用其toString方法,尽管我不能从您的代码中确定

  2. # 2 楼答案

    建议:

    1)取消“定期测试”。只需将“main()”移动到“regularpo”

    2)大写“RegularPo”(按照惯例,类名应以大写字母开头)

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

    。。。最重要的是

    4)您的main应该调用RegularPo regularPo = new RegularPo (...)。 然后引用对象实例“regularPo”

  3. # 3 楼答案

    尝试创建类regularpo的对象,并在该对象上调用toString

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

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

  4. # 4 楼答案

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

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

    regularpo obj=新的regularpo(); obj。toString()

  5. # 5 楼答案

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

    查看此SO-question了解更多信息

    这个Oracle-tutorial很好地解释了类成员