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

Java二维锯齿数组如何比较各列长度并校验是否存在等长列

二维锯齿数组列元素数量唯一性校验实现

前置说明

代码中用到了HashSet做去重校验,需要在文件开头补充导入:

import java.util.Set;
import java.util.HashSet;

核心实现逻辑

优先推荐输入阶段实时校验,避免用户输入完全部内容才发现不合法浪费时间:

  • 输入阶段实时校验:用户每输入一个列的行数,就和之前已输入的所有列的行数做比对,存在重复直接提示重新输入当前列的行数
  • 输入完成后统一校验:全部内容输入完成后,提取所有列的长度做去重比对,判断是否存在重复值

代码修改示例

1. 输入阶段实时校验(修改列输入部分的逻辑)

你可以把原来的列输入循环替换为如下逻辑,不用等全部输入完再校验:

// 存储已经输入过的列长度,用于快速去重校验
Set<Integer> columnLengthSet = new HashSet<>();
for (int i = 0; i < columns; i++){
    int rows;
    // 循环校验当前输入的列长度是否重复
    while (true) {
        System.out.print("输入第" + (i + 1) + "列的行数:");
        rows = input.nextInt();
        if (columnLengthSet.contains(rows)) {
            System.out.println("输入不合法:已存在相同行数的列,请重新输入");
        } else {
            columnLengthSet.add(rows);
            break;
        }
    }
    raggedArray[i] = new int[rows];
    for (int j = 0; j < rows; j++) {
        System.out.print("输入第" + (j + 1) + "行的元素值:");
        raggedArray[i][j] = input.nextInt();
    }
}

2. 输入完成后统一校验(替换你标注需要帮助的位置的代码)

如果你需要全部输入完成后再校验,可以用如下逻辑:

// 校验是否存在重复列长度
Set<Integer> lengthSet = new HashSet<>();
boolean hasDuplicate = false;
for (int[] col : raggedArray) {
    // Set的add方法返回false说明元素已存在,即有重复列长度
    if (!lengthSet.add(col.length)) {
        hasDuplicate = true;
        break;
    }
}
if (hasDuplicate) {
    System.out.println("输入不合法:存在2个及以上列的元素数量相同,请重新输入");
    // 赋值repeat为99,触发循环重新输入
    repeat = 99;
} else {
    repeat = 0;
    // 输出各列的元素数量
    int numberOfColumns = raggedArray.length;
    for (int i = 0; i < numberOfColumns; i++) {
        System.out.println("第" + i + "列共有" + raggedArray[i].length + "个元素");
    }
}

单指定列i的重复校验逻辑

如果你只需要判断某一个指定的第i列是否存在其他列和它元素数量相等,可以用如下逻辑:

/**
 * 校验指定索引的列是否存在其他列和它元素数量相同
 * @param raggedArray 待校验的锯齿数组
 * @param targetColumnIndex 待校验的列索引
 * @return 存在重复返回true,否则返回false
 */
public static boolean hasDuplicateLengthForColumn(int[][] raggedArray, int targetColumnIndex) {
    int targetLength = raggedArray[targetColumnIndex].length;
    for (int i = 0; i < raggedArray.length; i++) {
        if (i != targetColumnIndex && raggedArray[i].length == targetLength) {
            return true;
        }
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:00:02