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

数组元素存在n-1/n+1的判断逻辑及Java代码错误排查

问题分析与代码修正

首先,咱们来看你的代码逻辑问题所在:你的内层循环判断完全搞反了方向!

原代码里的内层循环:

if(a[i]+1!=a[j]||a[i]-1!=a[j]){
    isbean=0;
}

这个逻辑的意思是:只要当前j对应的元素不是a[i]+1或者不是a[i]-1,就把isbean设为0。这显然不对——比如对于元素2,当j遍历到10的时候,这个条件成立,直接把isbean改成0,但后面明明有3(2+1)存在,却已经被错误地标记为不满足条件了。

正确的逻辑应该是:对于每个元素a[i],我们需要检查数组中是否存在至少一个元素等于a[i]+1或者a[i]-1。如果遍历完整个数组都找不到这样的元素,才把isbean设为0,并且可以提前跳出循环节省时间。

修正后的代码

static int isBean(int... a) {
    // 默认是符合条件的bean数组
    int isbean = 1;
    for (int i = 0; i < a.length; i++) {
        // 为每个元素设置一个标记,默认找不到匹配的n-1或n+1
        boolean found = false;
        for (int j = 0; j < a.length; j++) {
            // 检查当前j元素是否是a[i]的相邻数
            if (a[j] == a[i] + 1 || a[j] == a[i] - 1) {
                found = true;
                // 找到就不用继续遍历了,跳出内层循环
                break;
            }
        }
        // 如果遍历完都没找到,说明这个元素不满足条件,整个数组不是bean数组
        if (!found) {
            isbean = 0;
            // 一旦有一个元素不满足,直接跳出外层循环,不用继续检查
            break;
        }
    }
    return isbean;
}

public static void main(String[] args) {
    int[] arr = {2, 10, 9, 3};
    System.out.println(isBean(arr)); // 现在会输出预期的1
}

关键修改点

  • 为每个元素增加found标记,用来追踪是否找到相邻数
  • 内层循环找到匹配的相邻数后,立即标记found=true并跳出内层循环,避免无效遍历
  • 外层循环中,如果某个元素的found仍然是false,直接将isbean设为0并跳出外层循环,提前终止判断
  • 修正了判断条件的逻辑,从“只要不匹配就标记失败”改成“找到匹配就标记成功”

这样修改后,你的测试数组{2,10,9,3}就能正确返回1了,每个元素都能找到对应的相邻数:

  • 2的相邻数是3(2+1)
  • 10的相邻数是9(10-1)
  • 9的相邻数是10(9+1)
  • 3的相邻数是2(3-1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:24