字符串字计数器
问题描述:
我必须打印一个字符串中的字数统计N次?字符串字计数器
例如:
一二三四三两个五
输出:3
由于一个,四和五只出现一次。
我的代码显示我的输出为1
什么是错我的代码和逻辑?谢谢。
import java.util.*;
public class Hello {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String s=scan.nextLine(),b;
int n=scan.nextInt();
int c=0,f=0,i;
String[] a=s.split(" ");
for(i=0;i<a.length;i++)
{
b=a[i];
for(int j=i+1;j<a.length;j++)
{
if(b.equalsIgnoreCase(a[j]))
{
c++;
}
}
if(n==c)
{
f++;
}
else
{
c=0;
}
}
System.out.print(f);
}
}
答
我看到三个原因导致您的结果不正确。
第一个是c
如果一个字在这里只有一次,那么if
声明if(b.equalsIgnoreCase(a[j]))
永远不会为真。这意味着c
将永远等于0 所以,你需要使用1
作为默认值c
还是应该使用下面的语句if (n == c + 1)
第二点是,你应该重新设置检查c
值值为c
,即使它等于n
。
然后用这双for循环:
for (i = 0; i < a.length; i++) {
b = a[i];
for (int j = i + 1; j < a.length; j++) {
当你寻找这是一个值。有一次而已,每一个单词的最后一个实例也会被计算在内。 有很多方法可以解决这个问题。其中之一是使用Set<String>
,只计算以前没有使用过的词。
所以最终你将有类似的东西:
int c=1,f=0,i;
String[] a=s.split(" ");
Set<String> words = new HashSet<>();
for (i = 0; i < a.length; i++) {
b = a[i];
if (words.add(b)) {
for (int j = i + 1; j < a.length; j++) {
if (b.equalsIgnoreCase(a[j])) {
c++;
}
}
if (n == c) {
f++;
}
c = 1;
}
}
答
我想这是因为当n == c时你不初始化C。因此它在一个和一个匹配后增加到1。它运作不好。它应该为0每个循环 也为什么j从i + 1开始?每个循环后,它会逐一失去比较自[j]越来越小。它应该始终包含完整输入号码列表
我建议通过它符合一个调试器步进一行。 – notyou
你永远不会重置'i'变量。 –