Java索引从1计数问题:JetBrains Java Core练习报错求助
问题:Java简易搜索引擎索引计数错误排查
练习要求
实现一个简易搜索引擎,在单行多单词输入中查找指定单词,单词索引从1开始计数。程序需读取两行输入:
- 第一行是多个单词组成的字符串
- 第二行是待查找的单词
输出规则:
- 找到目标单词则输出其1开始的索引
- 未找到则输出
Not Found
示例
示例1:
first second third fourth
third
3
示例2:
cat dog and mouse
elephant
Not found
我的代码
package search; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String sc1 = scanner.nextLine(); String[] splited = sc1.split("\\s+"); String sc2 = scanner.nextLine(); int index = 0; boolean flag = false; for (int i = 0; i <= splited.length - 1; i++) { if (sc2.contains(splited[i])) { flag = true; index = i+1; //line updated, same result } } if (flag) { System.out.println(index); } else { System.out.println("not found "); } } }
遇到的问题
测试#1报错:
hello my name is alex
my
输出结果为1(预期应为2)
调整代码后又出现新问题:输入what a beautiful place和what,输出为2(预期应为1)
尝试修改i和index的初始值、数组长度判断均无效,如何让索引正确从1开始计数?
问题根源与修复方案
1. 核心逻辑错误:字符串匹配方向颠倒
代码中使用sc2.contains(splited[i]),是用待查找单词去包含数组中的单词,而非判断两者完全相等。比如待查单词是my时,若数组中存在包含my的长单词(如myname),会误判为匹配;而像测试#1中,若待查单词逻辑写反,会导致匹配逻辑完全混乱。
正确逻辑应该是判断数组中的单词与待查单词完全相等,使用splited[i].equals(sc2)。
2. 循环冗余导致索引覆盖
原循环会遍历整个数组,即使找到目标单词后仍继续循环,若数组后续出现重复的目标单词,index会被覆盖为最后一个匹配项的索引。如果需求是找第一个出现的索引,找到后应立即终止循环。
修复后的代码
package search; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String sc1 = scanner.nextLine(); String[] splited = sc1.split("\\s+"); String sc2 = scanner.nextLine(); int index = 0; boolean flag = false; for (int i = 0; i < splited.length; i++) { // 简化循环条件,与原逻辑等价 if (splited[i].equals(sc2)) { // 修正为完全相等的匹配逻辑 flag = true; index = i + 1; // 数组0索引转题目要求的1开始计数 break; // 找到第一个匹配项后终止循环 } } if (flag) { System.out.println(index); } else { System.out.println("Not Found"); // 统一输出格式,与示例保持一致 } } }
额外注意事项
- 输出的
Not Found要严格匹配题目示例,原代码中输出的not found(小写且末尾带空格)不符合要求 - 循环条件
i <= splited.length -1可简化为i < splited.length,逻辑完全相同,更易读
内容的提问来源于stack exchange,提问作者AlElM
相关产品推荐
相关产品推荐

