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

如何编写Java程序统计数组连续数字个数并修复数组越界错误

数组越界原因
  • 你在代码中访问nums[j+1]时没有做边界校验:当j的值等于数组最大下标nums.length - 1时,j+1就超出了数组的合法索引范围(数组索引从0开始,最大为长度减1),直接触发越界异常
  • 内层循环的结束条件j < nums.length - i逻辑错误,且完全不需要嵌套两层循环实现该需求,对新手来说单循环的逻辑更简单易懂
逻辑问题说明

原有代码就算修复了越界问题也无法正常输出结果:

  • 连续数字的计数逻辑错误,nums[j+1]==counter的判断和需求毫无逻辑关联
  • 嵌套循环的设计完全不符合需求场景,会出现重复计数的问题
新手友好的简化实现

你已经做对了第一步:先给数组排序,排序后连续的数字必然是相邻的,只需要一次遍历就能统计出最长连续数字的个数,实现逻辑非常好懂:

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    System.out.println("最长连续数字的个数为:" + countConsecutive());
  }
    
  static int countConsecutive() {
    int[] nums = {16, 4, 5, 200, 6, 7, 70, 8};
    // 空数组直接返回0
    if (nums.length == 0) {
      return 0;
    }
    // 先排序,排序后连续数字必然相邻
    Arrays.sort(nums);
    // 输出排序后的数组
    System.out.println("排序后的数组:");
    for (int i = 0; i < nums.length; i++) {
      if (i != nums.length - 1) {
        System.out.print(nums[i] + ", ");
      } else {
        System.out.println(nums[i]);
      }
    }
    
    // 当前连续序列长度,最少为1(单个元素本身就是长度为1的序列)
    int currentCount = 1;
    // 记录最长的连续序列长度
    int maxCount = 1;
    
    // 从第二个元素开始和前一个对比
    for (int i = 1; i < nums.length; i++) {
      // 跳过重复元素,比如两个相同的7不算连续
      if (nums[i] == nums[i-1]) {
        continue;
      }
      // 当前元素比前一个大1,连续序列长度加1
      if (nums[i] == nums[i-1] + 1) {
        currentCount++;
        // 更新最长长度
        if (currentCount > maxCount) {
          maxCount = currentCount;
        }
      } else {
        // 连续序列中断,重置当前连续长度
        currentCount = 1;
      }
    }
    return maxCount;
  }
}

运行你给出的示例数组{1,8,10,4,2,3},会输出结果4,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:03