2013-12-17 86 views
0

所以我想知道爲什麼這會返回錯誤:「無法對Compn類型的非靜態方法comparen(args)進行靜態引用。我顯然不能使comparen()靜態方法,所以不知道有什麼問題。爲什麼這會導致錯誤 - 方法Java中的類

//8 bit comparison. bit 7 and bit 15 are highest. 
public static boolean[] comparator(boolean bit0, boolean bit1, boolean bit2, 
       boolean bit3, boolean bit4, boolean bit5, 
       boolean bit6, boolean bit7, 
       boolean bit8, boolean bit9, boolean bit10, 
       boolean bit11, boolean bit12, boolean bit13, 
       boolean bit14, boolean bit15) { 

    boolean[] comparatorOUT = new boolean[3]; //0 == A>B, 1 == B>A, 2 == A==B 
    boolean[][] currVal = new boolean[16][3]; // [0] = highest bit. 

    class Compn { 
     boolean[] comparen(boolean curr1, boolean curr2, boolean curr3, boolean b1, boolean b2) { 
      boolean[] storage = new boolean[3]; 
      storage[0] = curr3 && (((!xor(curr1, curr2) && b1) && !(!xor(curr1, curr2) && b2)) || curr1 && !curr2); 
      storage[1] = curr3 && (((!xor(curr1, curr2) && b2) && !(!xor(curr1, curr2) && b1)) || !curr1 && curr2); 
      storage[2] = curr3 && (!storage[0] && !storage[1]); 
      return storage; 
     } 
    } 
    currVal[0] = Compn.comparen(false, false, true, bit7, bit15); 
    currVal[1] = Compn.comparen(currVal[0][0], currVal[0][1], currVal[0][2], bit6, bit14); 
    currVal[2] = Compn.comparen(currVal[1][0], currVal[1][1], currVal[1][2], bit5, bit13); 
    currVal[3] = Compn.comparen(currVal[2][0], currVal[2][1], currVal[2][2], bit4, bit12); 
    currVal[4] = Compn.comparen(currVal[3][0], currVal[3][1], currVal[3][2], bit3, bit11); 
    currVal[5] = Compn.comparen(currVal[4][0], currVal[4][1], currVal[4][2], bit2, bit10); 
    currVal[6] = Compn.comparen(currVal[5][0], currVal[5][1], currVal[5][2], bit1, bit9); 
    currVal[7] = Compn.comparen(currVal[6][0], currVal[6][1], currVal[6][2], bit0, bit8); 

    comparatorOUT[0] = currVal[0][0] || currVal[1][0] || currVal[2][0] || currVal[3][0] || currVal[4][0] || currVal[5][0] || currVal[6][0] || currVal[7][0]; 
    comparatorOUT[1] = currVal[0][1] || currVal[1][1] || currVal[2][1] || currVal[3][1] || currVal[4][1] || currVal[5][1] || currVal[6][1] || currVal[7][1]; 
    comparatorOUT[2] = !comparatorOUT[0] && !comparatorOUT[1]; 

    return comparatorOUT; 
} 
+0

爲什麼你不能使'boolean [] compare' * static *? – Maroun

回答

2

只有當方法是靜態的,你纔可以這樣調用。

Compn.comparen 

你shold做這樣的

Compn c = new Compn(); 
currVal[0] = c.comparen(false, false, true, bit7, bit15); 

或更改comparen靜電。

爲什麼不把Compn類放在方法之外?

+0

我寧願方法本身是「自給自足的」。我試圖在Java中設計一個方法代表一個子電路的電路。在子電路中定義#comparen使其更具可重用性。謝謝,這有幫助。 –

0

你是對的,你不能在Comp內使comparen靜止。但這也意味着你不能稱之爲靜態。

從你的例子來看,你不明白爲什麼你需要類Compn。您可以使comparencomparator的靜態兄弟方法。

0

您已聲明本地類,它是內部類的一種,它不能聲明靜態成員。 Java有這個限制是有原因的:根本沒有必要聲明你的類。

移動comparen方法是你比較方法的兄弟,然後使其static。它沒有捕捉任何地方的國家,所以沒有什麼事情可以迫使你首先介紹這門課程。

如果你想與comparator封裝comparen在一起,然後你需要爲兩者的一個單獨的類。這是用Java的語言功能來滿足您的目標的唯一方法。

+0

如何創建「兄弟」方法?請記住,我希望將所有內容封裝在比較器方法中。 –

+0

與語法樹中的兄弟「比較器」並行聲明。我的回答已經證明,我記住你的願望,即使它沒有在你的問題中說明。 –

+0

對不起,但我真的不明白你會怎麼做。你可以發佈一些示例代碼? –

0

這是因爲方法comparen是類Compn的實例方法。如果不創建該類的實例,則無法調用實例方法。

相關問題