2014-03-25 35 views
-1

是的,我知道这个错误比普通流感更常见,并且我也不知道如何解决它。因为坦率地说,我不知道这个特殊情况下的含义。我有非常简单的代码来检查括号,但它没有编译到此,我不知道为什么。错误:非静态方法不能从静态上下文中引用

的错误是在测试类,行14

但这里有我的两个,只有类。

import java.util.Stack; 
import java.util.EmptyStackException; 

class Arithmetic 
{ 

Stack <Object>stk; 
String expression; 
int length; 

Arithmetic(String s) 
{ 
expression = s; 
length = expression.length(); 
stk = new Stack<Object>(); 
} 

boolean isBalanced() 
{ 
int index = 0; 
boolean fail = false; 

try 
    { 
    while(index < length) 
    { 
    char ch = expression.charAt(index); 

    switch(ch) 
     { 
     case '(': 
       stk.push(ch); 
     break; 

     case ')': 
       stk.pop(); 
     break; 

     default: 
       //ignore all others chars. 
     break;    
     } 
     index++; //increment index to continue on to the next char. 
    }   

    } 
    catch(EmptyStackException e) 
    { 
    fail = true; 
    } 
    return fail; 
} 


} 

的一个出现错误:

import javax.swing.JOptionPane; 
import javax.swing.JTextArea; 

class TestFile 
{ 
public static void main(String[] arg) 
{ 

    String menu = "Please enter an arithmetic expression to evaluate for balance:"; 
    String s = JOptionPane.showInputDialog(menu); 
    display(s); 

    new Arithmetic(s); 
    boolean balanced = Arithmetic.isBalanced(); 

    display(balanced); 


    } 
    static void display(boolean Boolean) 
{ 
    JOptionPane.showMessageDialog(null, Boolean, "Content",  JOptionPane.INFORMATION_MESSAGE); 
} 



static void display(String s) 
{ 
    JOptionPane.showMessageDialog(null, s, "Content", JOptionPane.INFORMATION_MESSAGE); 
} 
} 
+0

把你的头转向右边,看看'Related'部分。 –

+0

如果这会有所帮助,我会这样做,但它只是让我更困惑。 – user3236502

+2

没有任何人在这里发布将有助于。 –

回答

4

看看在你的榜样这些行:

new Arithmetic(s); 
boolean balanced = Arithmetic.isBalanced(); 

第一行创建一个对象。它使用Arithmetic类并调用接受字符串的构造函数。然后,由于没有变量被分配结果,新的对象被扔掉。

第二行尝试调用isBalanced。但是(因为它没有用static声明)isBalanced是一个实例方法,这意味着它需要在算术实例上调用。您在上一行中创建了一个可以调用isBalanced的对象,您只需要保留对其的引用,然后使用该引用。

指定新的对象变量:

Arithmetic a = new Arithmetic(s); 
boolean balanced = a.isBalanced(); 
+0

谢谢!看到这就是我所需要的,我不知道我扔掉了物体。 – user3236502

+0

我会在一分钟内允许我这样做。 – user3236502

+0

顺便说一句,谢谢你解释为什么它不工作。 – user3236502

0

的问题是,你叫isBalanced在类Arithmetic,而不是一个实例。

下应该可以解决问题:

Arithmetic a = new Arithmetic(s); 
a.isBalanced(); 

作为一个方面说明:Boolean是一个类,盒一个boolean值的名称。

相关问题