You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:24:03