3 回答
TA贡献1906条经验 获得超3个赞
这里:
charAt(k);
基本上是一样的
this.charAt(k);
换句话说:您正试图在此代码所在的类上调用一个方法。
我假设你打算这样做someStringVariable.charAt(k)
!(当然,你的意思是s.charAt()
,但它s
是一个可怕的,没有任何意义的变量名称。你的变量是你的宠物,给它们起个有意义的名字!)
TA贡献1856条经验 获得超11个赞
你必须像这样更正你的代码,
while (iterator.hasNext()) {
int count = 0;
Character st = (Character) iterator.next();
for (int k = 0; k < s.length(); k++) {
if (s.charAt(k) == st) { // Why this charAt method is not working?
count++;
}
}
if (count > 1) {
System.out.println("Occurance of " + st + " is: " + count);
}
}
charAt方法在String类中可用,因此您必须在String引用上调用它。我也对代码做了一些改进。在while循环内声明计数变量,这样不容易出错。最后请注意,我已将if语句从for循环中移开,因为如果将其保留在for循环内,则会产生一些虚假的中间结果。
TA贡献1890条经验 获得超9个赞
问题是你试图在一个字符的位置获取一个字符。创建变量时,st它是一个字符,长度为 1;因此你无法到达charAt(index)那里。此外,这种使用 的方法LinkedHashSet将不起作用,因为当您将这些字符添加到 时,LinkedHashSet它不会多次添加每个字符。相反,您想要一个ArrayList.
这可能不是最有效的解决方案,但它会完成您尝试使用 HashSet
String s = "mmamma";
List<Character> characterList = new ArrayList<>();
LinkedHashSet<Character> characterLinkedHashSet = new LinkedHashSet<>();
for(char c : s.toCharArray()) {
characterLinkedHashSet.add(c);
characterList.add(c);
}
for (Character character : characterLinkedHashSet) {
int frequency = Collections.frequency(characterList, character);
System.out.println("The frequency of char " + character + " is " + frequency);
}
因此,它的作用是创建您的LinkedHashSet以及ArrayList. 在ArrayList所有的字符店Collection和LinkedHashSet专卖店只有每个字符的一个实例。然后我们可以循环HashSet并获取内部的频率ArrayList
添加回答
举报