【问题标题】:Why do I keep receiving "i cannot be resolved to a variable" [duplicate]为什么我一直收到“我无法解析为变量”[重复]
【发布时间】:2021-11-06 12:50:20
【问题描述】:
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<String> NewList = new ArrayList<String>(Arrays.asList(StringLetters.split(",")));
//      System.out.print(NewList);
//      System.out.print(NewList.size());
        char CharA = 'a';
        int count = 0;
        for(int i = 0; i < NewList.size(); i++);{
            if (NewList.indexOf(i) == CharA);{
                System.out.print(i);
            }
        }
        }
}

我正在构建一个计算 Java 字符串中重复值的程序。但是,即使它在 for 循环中初始化,我也会收到“我无法解析为变量”?任何指导表示赞赏。

【问题讨论】:

  • 不,这不是因为你的循环体是空的,而下一部分只是一个范围块!其原因是额外的; 潜入循环的){ 之间。 (顺便说一下,你的if 也有同样的问题。)

标签: java arrays string for-loop arraylist


【解决方案1】:

for(int i = 0; i &lt; NewList.size(); i++);{

最后的分号包含循环时要做的事情块。换句话说,你的 for 循环什么都不做

然后你有一个{,它只是开始一个块。这是合法的java。试试看:

public void test() {
    int x = 5;
     { // let's just start a block for no reason
        System.out.println(x);
     }
}

编译和运行都很好。

i 存在于其范围内(这是您的 for 声明的 3 个部分,如在 () 内和 for 循环体中,在您的情况下只是半-冒号),之后不再存在。 { 在这里算作“之后”。

解决方法:去掉分号。

【讨论】:

    【解决方案2】:

    删除for(int i = 0; i &lt; NewList.size(); i++); 行中的;
    这实际上使得 i 仅在 for(int i = 0; i &lt; NewList.size(); i++); 内部定义,而它在内部没有定义

    if (NewList.indexOf(i) == CharA);{
        System.out.print(i);
    }
    

    阻止

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2018-11-27
      • 1970-01-01
      • 2015-01-12
      相关资源
      最近更新 更多