2014-03-25 132 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值的名稱。

相關問題