Java统计字符串重复字符时报i cannot be resolved to a variable错误如何解决
问题修复说明
报错根因
你遇到的i cannot be resolved to a variable报错直接原因是:for循环声明的末尾多写了一个英文分号;。
这个分号会被Java编译器识别为for循环的结束标记,你写的for循环实际是空循环,后面大括号包裹的代码完全不在for循环的作用域范围内,自然无法访问到仅在for循环内部声明的变量i。
其他需修正的问题
除了上述语法错误,你的代码还存在几个逻辑问题会导致功能无法正常实现:
if判断语句的末尾也多写了一个英文分号;,会导致if判断直接结束,后续大括号内的代码不受if条件控制,无论判断结果是否成立都会执行。- 你调用
String.split(",")是按逗号分割原字符串,但你的原字符串"aaabbbccc"中没有逗号,分割后得到的List只会有1个元素(完整的原字符串),完全不符合拆分单个字符统计的需求。 NewList.indexOf(i)用法错误:indexOf()方法的入参是要查找的元素,返回值是元素对应的下标,你要按下标获取对应位置的元素应该调用get()方法。同时List中存储的是String类型,直接和char类型的CharA做相等判断永远不会成立。
修正后可运行参考代码
import java.util.Arrays; import java.util.ArrayList; import java.util.List; public class FindDuplicates { public static void main(String[] args) { String StringLetters = "aaabbbccc"; // 按单个字符拆分字符串生成List List<String> NewList = new ArrayList<String>(Arrays.asList(StringLetters.split(""))); char CharA = 'a'; int count = 0; // 移除for末尾多余的分号 for(int i = 0; i < NewList.size(); i++){ // 用get方法获取下标对应元素,转为char后比较,移除if末尾多余的分号 if (NewList.get(i).charAt(0) == CharA){ count++; System.out.println("下标" + i + "位置为字符a"); } } System.out.println("字符a总出现次数:" + count); } }
内容的提问来源于stack exchange,提问作者Bakht Khan
相关产品推荐
相关产品推荐

