非静态和静态方法

时间:2013-12-28 07:57:49

标签: java arrays static

我发现问题在这里说,

non-static method blah blah blah cannot be referenced from a static context

这是函数convertToPostfix和convertToInfix不是静态方法....

如何解决这个问题,以便我现在可以编译我的代码。

   public static void main (String[] args) 
    {
        String n, result;
        char character;
        do {
        character = choiceko();
        switch (character)
        {
            case 'P':
            case 'p': n=numberko("Enter a number: ");
              =======>  result = convertToPostfix(n); <============
                JOptionPane.showMessageDialog(null,
               "Infix: " + n + " to Postfix [" +result+"].");
               break;
            case 'I':       
            case 'i': n=numberko("Enter a Number: ");
              =======>  result=convertToInfix(n);<============
                JOptionPane.showMessageDialog(null,
                "Postfix: " + n + " to Infix [" +result+"].");
                break;
            case 'E':
            case 'e':  JOptionPane.showMessageDialog(null, 
                "Program Terminated...","Terminated",JOptionPane.WARNING_MESSAGE);
                break;              
            default:  JOptionPane.showMessageDialog(null,
                " Invalid selection. Please Try Again.","ERROR",JOptionPane.WARNING_MESSAGE);           
    }
}

2 个答案:

答案 0 :(得分:0)

 =======>  result=convertToInfix(n);<============

因为您在静态上下文中访问convertToInfix方法(main方法是静态的),所以该方法应该是静态方法。

解决方案:

1)使convertToInfix方法静态

2)创建一个具有方法convertToInfix

的类的实例
case 'i': n=numberko("Enter a Number: ");
              ClassOfMethod instance = new ClassOfMethod(); 
              result=instance.convertToInfix(n);
              JOptionPane.showMessageDialog(null,

答案 1 :(得分:0)

由于这两个方法convertToPostfix和convertToInfix是非静态的,所以你需要创建一个类的对象,然后调用这些方法。这是因为main是static.Lets说你的类名是test.Then这样做

test t=new test();
t.convertToPostfix(n);
t.convertToInfix(n);