Java 字符串字计数器

Java 字符串字计数器,java,string,algorithm,count,Java,String,Algorithm,Count,我必须打印一个字符串中重复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;

我必须打印一个字符串中重复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);

    }
}
import java.util.*;
公共课你好{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串s=scan.nextLine(),b;
int n=scan.nextInt();
int c=0,f=0,i;
字符串[]a=s.split(“”);

对于(i=0;i我认为这是因为当n=C时,你没有初始化C。因此,在1和1匹配后,它会增加到1。而且它工作不好。对于每个循环,它应该是0
还有为什么j从i+1开始?在每个循环之后,它会一个接一个地失去比较,因为a[j]越来越小。它应该总是包含完整的输入数字列表。我认为有三个原因使您的结果不正确

第一个是
c
如果一个单词在这里只出现一次,那么
If
语句
If(b.equalsIgnoreCase(a[j]))
将永远不会为真。这意味着
c
将始终等于0。 因此,您需要使用
1
作为
c
的默认值,或者您应该使用以下语句检查
c
的值,如果(n==c+1)

第二点是,您应该重置
c
的值,即使它等于
n

然后使用此双for循环:

for (i = 0; i < a.length; i++) {
   b = a[i];
   for (int j = i + 1; j < a.length; j++) {
for(i=0;i
当您搜索一个只存在一次的值时,每个单词最后出现的次数也将被计算在内。 有很多方法可以解决这个问题,其中之一就是使用
Set
,只计算以前没有使用过的单词

所以最后你会有类似的东西:

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;
  }
}
intc=1,f=0,i;
字符串[]a=s.split(“”);
Set words=新HashSet();
对于(i=0;i
我建议使用调试器逐行执行。您永远不会重置
I
变量。