如何简化测试序列的功能

时间:2018-06-15 20:50:04

标签: java arrays

 public boolean Stairs() {
    Arrays.sort(collector);
    for (int c = 0; c < collector.length; c++) {
        if (collector[5] - collector[4]==1 && collector[4] - collector[3]==1 && collector[3] - collector[2]==1 && collector[2] - collector[1]==1 && collector[1] - collector[0]==1) {
            return true;
        }
    }
    return false;
}

此功能应测试是否有正在播放的序列。

我的想法是:if(collector[c]==collector[c+1]+1),但每次运行时我都会遇到一个超出范围的异常,所以基本上我正在寻找帮助来找到一种方法来将这个函数重构为更高效的函数。

4 个答案:

答案 0 :(得分:0)

您当前的版本不需要for循环,因为永远不会使用i。您还假设序列中恰好有6个元素。

你的第二个版本更正确。由于collector[c+1],您只需要小心计数器。这意味着您需要比现在更早地停止循环一个元素。只需将for循环条件更改为c < collector.length - 1

答案 1 :(得分:0)

您可以将数组从位置0驻留到位置collector.length -1。但是,在它之前,你应该检查长度是否大于1.

{{1}}

答案 2 :(得分:0)

感谢您的帮助!,我测试了您的建议,这有效:

 public boolean Stairs() {
    Arrays.sort(collector);
    for (int c = 0; c < collector.length -1; c++){
        if(collector[c] == collector[c+1]-1)
        return true;
    }
    return false;
}

答案 3 :(得分:0)

我认为@Chris Parker有一个重点。您的回答当前没有测试整个数组是否已排序,就像前2个元素一样。你需要做的是:

public boolean Stairs() {
    Arrays.sort(collector);
    for (int c = 0; c < collector.length -1; c++) {
        if (collector[c] != collector[c+1] - 1) {
            return false;
        }
    }
    return true;
}

这样,只有在您确认所有数字都遵循固定增量后,您才会返回true;如果您发现任何不适合的转换,您可以立即返回false