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

Java实现数组倒数第N个元素的代码问题排查

问题分析与修正

错误原因

原代码存在三个核心问题:

  1. 负数被错误存入数组:读取到负数时,代码直接将其赋值给userValues[i],违反了“负数不存入数组”的需求,同时导致有效元素计数逻辑混乱。
  2. 索引计算完全错误:printValue = i - neg的逻辑完全不符合“倒数第N个元素”的计算规则。neg是负数,i - neg等价于i + |neg|,会直接超出有效元素的索引范围。正确的索引应该是有效元素个数count减去N(N是负数的绝对值),即count - N。
  3. 条件判断逻辑失效:代码中if(neg > i)的判断永远无法成立(neg是负数,i是正整数),导致当数组长度小于N时,无法输出原负数,反而会访问数组的无效索引。

修正后的代码

import java.util.Scanner; 

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      int[] userValues = new int[20];
      int neg = 0;
      int count = 0; // 记录有效正整数的个数

      // 读取输入,直到遇到负数
      while (count < userValues.length && scnr.hasNextInt()) {
          int num = scnr.nextInt();
          if (num < 0) {
              neg = num;
              break;
          }
          // 正整数存入数组,计数加1
          userValues[count] = num;
          count++;
      }

      // 处理输出逻辑
      int N = -neg;
      if (count < N) {
          System.out.println(neg);
      } else {
          // 倒数第N个元素的索引:有效个数 - N
          System.out.println(userValues[count - N]);
      }
   }
}

测试验证

  • 输入1 5 9 7 5 -3:有效元素个数count=5,N=3,5>=3,索引为5-3=2,对应元素9,符合预期。
  • 输入4 5 6 7 8 9 10 11 12 13 14 -1:count=11,N=1,索引11-1=10,对应元素14,符合预期。
  • 输入1 2 -5:count=2 < 5,输出原负数-5,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:35:22