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

如何使用for循环实现指定索引对应坑的起止位置查找?

实现坑的起始与结束索引查找功能

需求说明

给定一个每行存储一个整数的文本文件,整数代表地面坑的深度(0为平地)。输入一个1-based索引:

  • 若该索引处值为0,提示“该索引处没有坑!”
  • 若该索引处是坑(值不为0),从该位置反向遍历到第一个0的位置,确定坑的起始索引;再正向遍历到第一个0的位置,确定坑的结束索引。

以示例数据为例:

0
0
0
1
2
2
2
2
2
2
3
2
2
1
0

输入索引10(对应深度3),最终应输出起始索引3、结束索引13。

修正后的完整实现代码

import java.util.List;
import java.util.Scanner;

public class PitFinder {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 假设data已从txt文件读取完成,存储每行字符串
        List<String> data = List.of("0", "0", "0", "1", "2", "2", "2", "2", "2", "2", "3", "2", "2", "1", "0");
        
        // 获取用户输入的1-based索引
        int inputIndex = sc.nextInt();
        int currentIdx = inputIndex - 1; // 转换为0-based索引
        
        // 校验索引合法性
        if (currentIdx < 0 || currentIdx >= data.size()) {
            System.out.println("输入的索引超出范围!");
            return;
        }
        
        int depth = Integer.parseInt(data.get(currentIdx));
        if (depth == 0) {
            System.out.println("该索引处没有坑!");
            return;
        }
        
        // 反向遍历找坑的起始索引(1-based)
        int startIdx = currentIdx;
        while (startIdx > 0) {
            int prevDepth = Integer.parseInt(data.get(startIdx - 1));
            if (prevDepth == 0) {
                break;
            }
            startIdx--;
        }
        int pitStart = startIdx + 1;
        
        // 正向遍历找坑的结束索引(1-based)
        int endIdx = currentIdx;
        while (endIdx < data.size() - 1) {
            int nextDepth = Integer.parseInt(data.get(endIdx + 1));
            if (nextDepth == 0) {
                break;
            }
            endIdx++;
        }
        int pitEnd = endIdx + 1;
        
        System.out.printf("坑的起始索引:%d,结束索引:%d%n", pitStart, pitEnd);
    }
}

关键逻辑说明

  1. 索引转换:用户输入的是1-based索引,需转换为代码中列表的0-based索引进行操作,最终输出时再转回1-based。
  2. 反向遍历找起始:从当前索引向左遍历,直到遇到前一个位置为0,此时当前位置就是坑的第一个非0位置,转1-based后即为起始索引。
  3. 正向遍历找结束:从当前索引向右遍历,直到遇到后一个位置为0,此时当前位置就是坑的最后一个非0位置,转1-based后即为结束索引。
  4. 边界处理:若坑位于列表首尾(无相邻0),遍历会自动停止在列表边界,避免越界。

原代码问题分析

  • 遍历初始值错误:用input(深度值)代替当前索引位置,逻辑完全错误。
  • 循环条件错误:反向遍历使用i < data.size(),不符合向左遍历的逻辑,应改为i >= 0。
  • 未终止循环:找到第一个0后未停止遍历,会继续查找更前面的0,导致起始索引错误。
  • 缺失正向遍历逻辑:未实现坑的结束索引查找功能。

内容的提问来源于stack exchange,提问作者Nicoden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:05:29