2014-09-19 47 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