问题计数器和数组

时间:2014-11-23 23:15:16

标签: java arrays java.util.scanner counter

我试图找到一种让这个字母计数器运行的方法,它必须在letterCounter类中使用数组。我很困惑如何在它简明扼要的地方做到这一点。以下是我为此部分提供的说明:

如果mychar是一个小写字母,我们可以在count数组中找到相应的位置 简单的减法,如下: 计算[mychar - 'a'] (这是另一个你最终想要用常量替换的神奇值。) 那么大写字母怎么样?使用静态方法Character.toLowerCase(mychar)。 注意:if(Character.toLowerCase(mychar) - 'a')评估范围之外的东西 [0,25],那么mychar不是字母表中的字母,应该被忽略。 因此,您之前添加的流程方法只是迭代传递的String中的字符 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存储在一个数组中并要求返回该字母中的字母吗?

2 个答案:

答案 0 :(得分:0)

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

LetterCount类: - 有一个数组[25]

处理功能:

  • 扫描每个字符

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

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

Getcount func

  • 返回计数[param.tolowercase - ' a']

答案 1 :(得分:0)

这是基本的解决方案......你仍然只需要过滤字母字符的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)]++;
      }
  }

}