Java 字符串字计数器
我必须打印一个字符串中重复N次的单词数 例如: 一二三四三二五 一, 产出:3 因为一、四、五只出现一次 我的代码将输出显示为1 我的代码和逻辑出了什么问题?谢谢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;
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
变量。