我试图找到一种让这个字母计数器运行的方法,它必须在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存储在一个数组中并要求返回该字母中的字母吗?
答案 0 :(得分:0)
是的,您的解决方案是一个很好的解决方案,因此步骤是:(伪代码)
LetterCount类: - 有一个数组[25]
处理功能:
扫描每个字符
如果是char - ' a'不是信:继续
算[char - ' a'] ++(实际上' a'代表97,是ascii值)
Getcount func
答案 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)]++;
}
}
}