问题计数器和数组



我正在尝试找到一种方法来使这个字母计数器运行,并且它必须在letterCounter类中使用数组。我对如何在简洁的地方做到这一点感到困惑。以下是本节给我的说明:

如果 mychar 是小写字母,我们可以在 count 数组中找到相应的位置,使用简单的减法,如下所示:计数[mychar - 'a'](a 是另一个魔术值,您最终希望将其替换为常量。那么大写字母呢?使用静态方法 Character.toLowerCase(mychar)。注意:如果(Character.toLowerCase(mychar) - 'a')计算结果超出范围[0, 25],那么mychar不是字母表中的字母,应该被忽略。因此,您之前添加的 process 方法只是遍历传递的字符串中的字符in,并递增数组中每个字母的值。同样,getCount 方法将字符参数转换为位置并返回计数。确保您了解(并稍后记录)此方法在参数不是字母表中的字母。

这是我的代码:

import java.util.Scanner;
public class CounterDemo
{
public static void main(String[] args)
{
    LetterCounter cc = new LetterCounter();
    cc.process("foo");
    cc.process("supercalafrajalisticexpialadoscious");
    cc.process("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz");
    System.out.println("There are " + cc.getCount('z') + "z's");
}
}
public class LetterCounter {
public int getCount(char letter)
{
   // empty method for now
  return 0;
}
public void process(String string) {
    // TODO Auto-generated method stub
}
}

那么我会只将 0-25 存储在数组中并要求返回字母(如果它在该数组中)吗?

是的,您的解决方案是一个很好的解决方案,因此步骤如下: (伪代码)

字母计数类:- 有数组计数[25]

流程功能:

  • 扫描每个字符

  • 如果 char -'a' 不是字母:继续

  • count[char - 'a']++(实际上'a'代表97,是ASCII值)

Getcount func

  • 返回计数[参数小写 - 'a']
这是

基本的解决方案...您仍然需要仅针对字母字符过滤getCount的结果,但几乎就是这样

public class LetterCounter 
{
  public LetterCounter()
  {
      hash = new int[255];
      for (int i = 0; i < hash.length(); i++) hash[i] = 0;
  }
  private int[] hash;
  public int getCount(char letter)
  {
      return hash[(int)letter)];
  }
  public void process(String string) 
  {
      for (int i = 0; i < string.length(); i++)
      {
         hash[(int)string.charAt(i)]++;
      }
  }
}

最新更新