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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:40:35