java - 查找第二次出现的子字符串的 Java 方法中的“错误:找不到符号”
问题描述
我正在编写一个方法来查找数组中第二次出现的子字符串的索引。它发现第一次出现的索引很好。
接下来,我尝试创建从first
索引开始的循环,但它不起作用。second
它说关于我的变量的“错误:找不到符号” 。
请给我任何建议如何改进我的代码或使用此方法的其他实现...</p>
int findSecond(String[] strArray, String str) {
for (int i = 0; i < strArray.length; i += 1) {
if (i > 1) {
int first = Arrays.asList(strArray).indexOf(str);
// int second = Arrays.asList(strArray).indexOf(str, first + 1);
for (int e = first; e < strArray.length; e += 1) {
int second = Arrays.asList(strArray).indexOf(str);
}
return second;
}
}
return -1;
}
解决方案
你的问题的原因是变量“范围”的Java概念,特别是“块范围”。定义变量时,它只存在于定义它的块 ( {
}
) 中。在块之后运行的代码中,该变量已被丢弃,不能再使用。Java 这样做既是为了减少程序使用的内存,也是为了使代码更易于理解——在阅读代码时,您知道您不必考虑不再在范围内的变量。
块范围会导致您在这部分代码中出现问题:
for (int e = first; e < strArray.length; e += 1) {
int second = Arrays.asList(strArray).indexOf(str);
}
return second;
你的second
变量不存在就行return second
。之前的int second
变量声明只对声明所在的块有效——for
循环块。
要解决此问题,您必须在使用它的最外层范围内声明该变量。尽管您的代码在循环运行之前无法知道second
变量应该具有什么值for
,但您仍然可以在不分配值的情况下声明变量,然后在后面的行中分配值:
int second;
for (int e = first; e < strArray.length; e += 1) {
second = Arrays.asList(strArray).indexOf(str);
}
return second;
推荐阅读
- bash - SLURM下的循环中缺少迭代
- javascript - 为部署在 tomcat 上的 react\spring 应用配置 url
- javascript - 传单,地图非地理分辨率
- windows - 如何验证 CNTLM 是否正常工作?
- javascript - Js多维数组设置值奇数
- excel - “格式”不适用于特定的日期格式
- sql-server - 另一种在不使用 or 运算符的情况下编写此代码的方法以提高性能
- kubernetes - 如何解决“由于节点以某种方式错误配置(必需的 cgroups 已禁用)错误导致 kubelet 不健康
- mysql - MySQL 查询/表需要优化
- xml - 我需要在 xslt 中将一个数字拆分为单独的数字