gpt4 book ai didi

java - 字串计数器

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:12:00 28 4
gpt4 key购买 nike

我必须打印字符串中恰好重复 N 次的单词数?

例子:

一二三四三二五

1

输出: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 的默认值或者你应该检查 c 的值使用以下语句 if (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++) {

当您搜索仅存在一次的值时,每个单词的最后一次出现也将被计算在内。有很多方法可以解决这个问题。其中之一是使用 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;
}
}

关于java - 字串计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47363878/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com