0

我需要对此逻辑的帮助..我有一个结果,

在此结果集中有一列称为“数字”

我需要发现里面没有什么号码,

例子:

Number
10
11
12
15
20
21
25

我正在这样做:将实际值作为 A,执行 aresult.next()并检查实际值是否value == (A+1)

当然这不起作用,--',因为行数 = 数据库中的数据,而不是基于数字序列

有人有一个技巧可以让它显示跳跃的数字?

13
14
16
17
18
19
22

....一直到最后一个数字!!

我经历过类似的事情:

while(results.next()){
a = previoslyresults("number");

if(actualresult("number") != (a + 1)) {
for(i = 1; i< (actualresults("number") - (a +1));i++) {
 syso("are missing the " (actualresults("number") + i);
}

}
}
4

2 回答 2

0

这是我想要的解决方案,我已经包含了一个数组版本来测试它:

class ExpectationChecker
{
    private final boolean[] results;
    private final int min;

    public ExpectationChecker(final int min, final int max)
    {
        this.results = new boolean[max - min + 1];
        this.min = min;
    }

    public Integer[] getMissingNumbers(final ResultSet results) throws SQLException
    {
        while(results.next())
        {
            //Offset by min
            this.results[results.getInt(1) - this.min] = true;
        }
        final List<Integer> missingNums = new ArrayList<>();
        for(int i = 0; i < this.results.length; i++)
        {
            if(!this.results[i])
            {
                //Add min in case min isn't 0
                missingNums.add(i + this.min);
            }
        }
        return missingNums.toArray(new Integer[missingNums.size()]);
    }

    public Integer[] getMissingNumbers(final int[] results)
    {
        for(int i = 0; i < results.length; i++)
        {
            //Offset by min
            this.results[results[i] - this.min] = true;
        }
        final List<Integer> missingNums = new ArrayList<>();
        for(int i = 0; i < this.results.length; i++)
        {
            if(!this.results[i])
            {
                //Add min in case min isn't 0
                missingNums.add(i + this.min);
            }
        }
        return missingNums.toArray(new Integer[missingNums.size()]);
    }

    public static void main(String[] args)
    {
        final ExpectationChecker ec = new ExpectationChecker(10, 20);
        final int[] test = {11, 12, 13, 14, 17, 19};
        System.out.println(Arrays.deepToString(ec.getMissingNumbers(test)));
    }
}

产生输出:

[10, 15, 16, 18, 20]
于 2013-09-05T20:39:04.947 回答
0

您可以在 arrayList 中添加所有数字,并手动检查下限和上限,在此基础上,您可以通过循环检查值轻松获得不在结果集中的数字。

于 2013-09-05T20:26:47.237 回答