2014-09-19 82 views
0

我試圖編寫這個方法作爲一個靜態方法,但我不完全瞭解靜態方法如何工作過去他們沒有創建對象來處理。作爲一種靜態方法編寫一個非靜態方法

這是我想轉換

public void process(String str) 
{ 
    for (int i=0; i<str.length(); i++){ 
     char letter = str.charAt(i); 
     int index = Character.toLowerCase(letter-'a'); 
     if (index>=0 && index<26){ 
      counts[index]++; 
     } 
    } 
} 

這種方法只需要一個字符串的方法,並記錄每個字母在字符串露面的次數

我試着去寫爲一個靜態方法,我有這種方法存根

public static LetterCounter buildCounter(String str) 
{ 

} 
+1

那麼,什麼概率? – CMPS 2014-09-19 02:16:26

+0

問題是'counts'是一個實例變量,所以你不能從靜態方法中引用它。如果這不是問題,那麼在返回類型之前添加'static'會很簡單。 – 2014-09-19 02:20:11

+0

是你的計數數組實例變量還是靜態變量? – 2014-09-19 02:56:14

回答

1

您的當前代碼需要將[]聲明爲靜態,也就是說只有一個計數[],並且每次調用MyClass.process(「blah」)時它都會增加類變量計數[index ]

我在猜測,但我想你要做的是創建一個靜態的「工具」函數來返回傳入字符串中的各種字符的計數數組嗎?因此類似於這個(未經測試的)代碼 然後你會調用像MyUtilClass.process(「xxyz」); 在這種情況下,「靜態」意味着過程沒有與一個對象關聯,它更像是一個「函數」或「子程序」

public static int[] process(String str) { 
    int[] counts = new int[25]; 
    for (int i=0; i<str.length(); i++){ 
     char letter = str.charAt(i); 
     int index = Character.toLowerCase(letter-'a'); 
     if (index>=0 && index<26){ 
      counts[index]++; 
     } 
    } 
return counts; 
} 
+0

是的,這正是我想要做的..計數數組是靜態的那些想知道的。感謝所有的幫助順便說一句 – jcvandam 2014-09-19 21:57:26

+0

不要忘記標記答案爲接受,如果它解決了你的問題 – nPn 2014-09-19 22:01:26

2

因爲這是一個學習的過程,我不會寫任何代碼,但描述需要做什麼:

  1. 創建LetterCounter
  2. 調用一個實例方法process它的一個新的實例,傳遞str您在buildCounter
  3. 返回了您在步驟中創建的LetterCounter實例1

你完成了!

+0

是不是@ jcvandam試圖把它寫成靜態方法?如果它是靜態的,則不需要創建它的一個實例。你應該可以調用'LetterCounter.process()'。 – Fodder 2014-09-19 03:12:27