2014-03-30 89 views
0

我通常在Python中進行編碼,這個錯誤對我來說毫無意義。我無法理解我在這裏可能做錯了什麼。我用相同的錯誤信息檢查出類似的線程無濟於事。令牌「makeMiddle」上的語法錯誤,@在此令牌之前預期

我認爲這個錯誤與在Java中調用相同的類和方法有關。嘗試切換方法被調用,但沒有做到這一點。有任何想法嗎?

public class test2 { 


    public int[] makeMiddle(int[] nums){ 

     int[] l1 = {nums[(nums.length/2)-1], nums[(nums.length/2)]}; 
     return l1; 

    } 

    public static void main(String[] args){ 
     makeMiddle({1,2,3,4}); 
     makeMiddle({5,6,2,1,7,6,3,4,0,1}); 
    } 

} 

回答

2

你的代碼有幾個問題。

public int[] makeMiddle(int[] nums){ 

    int[] l1 = {nums[(nums.length/2)-1], nums[(nums.length/2)]}; 
    return l1; 

} 

main是一個靜態函數。這意味着它可以在不實際實例化該類的對象的情況下被調用。靜態函數不能引用任何成員變量(因爲不能保證這些變量已被實例化),因此只能調用標記爲靜態的成員函數。將您的方法定義更改爲:

public static int[] makeMiddle(int[] nums){ 

您還有一個語法錯誤(重複兩次)。

makeMiddle({1,2,3,4}); 
makeMiddle({5,6,2,1,7,6,3,4,0,1}); 

應該

makeMiddle(new int[]{1,2,3,4}); 
makeMiddle(new int[]{5,6,2,1,7,6,3,4,0,1}); 
+0

所以,如果我理解正確; 1)如果main是靜態的,那麼它只能調用靜態方法,並且2)我需要在Java中輸入轉換參數甚至參數 –

+1

@ chopperdrawlion4 1)main可以調用非靜態方法,只要您提供對象以調用它們即可,比如在@ dafi的回答中。 2)如果你把makeMiddle的參數類型設置爲'int ...',你可以消除'new int [] {'...'}',就像在我的答案中一樣。 – Boann

+1

主要始終是靜態的。如果你想調用一個對象的非靜態方法,你必須在main中實例化這個對象,然後用它來調用它的方法。 – casperw

1

您必須使用構造new int [] {a,b,...};

public static void main(String[] args){ 
    test2 t2 = new test2(); 
    t2.makeMiddle(new int[]{1,2,3,4}); 
    t2.makeMiddle(new int[]{5,6,2,1,7,6,3,4,0,1}); 
} 
+0

所以每次我傳遞參數的方法,我總是需要把這個詞「新」和類型? –

+1

如果你傳遞原始類型數組,你需要使用那個構造來分配它們 – dafi

1

如果改變makeMiddle的參數從int[]int...的類型,那麼你可以很簡單地如下稱之爲:

makeMiddle(1,2,3,4); 

您仍然可以也有明確的數組來調用它,如:

makeMiddle(new int[] { 1,2,3,4 }); 

的方法也應該是static,因爲它是從靜態的主調用。

相關問題