首页 > 解决方案 > 在未排序的数组中查找 4 个连续相同值的整数 - Java

问题描述

我环顾四周,但由于某种原因找不到在 java 中完成此操作的人。我需要编写一段代码,它接受一个单间隔整数数组,并确定其中是否有四个连续的、相同值的整数。(我以前用其他语言编写过代码,但我正在尝试学习 Java,所以我无法让它工作的事实让我发疯了。)我在下面包含了我迄今为止编写的代码。

public static boolean isConsecutiveFour(int[] checkArray) {  

    for (int i = 1; i < checkArray[0]-1; i++){
        int lower2 = [checkArray[i-2] intValue];
        int lower1 = [checkArray[i-1] intValue];
        int mid = [checkArray[i] intValue];
        int upper1 = [checkArray[i+1] intValue];
        int upper2 = [checkArray[i+2] intValue];

        if ((lower2 == lower1 && lower1 == mid && mid == upper1) 
                                    || 
            (lower1 == mid && mid == upper1 && upper1 == upper2)) {
            return true;
        }
    } 
    return false;
}

标签: javaarrays

解决方案


你的代码出了什么问题?

另一个答案向您展示了一种直接从用户输入中获取结果的快速而智能的方法。我会看看你的代码并修复错误。

您在这里遇到了语法问题:

        int lower2 = [checkArray[i-2] intValue];

外面的方括号和单词intValue不属于这里。假设您已经将用户输入放入一个整数数组中(如参数声明所述int[] checkArray),您可以这样做:

        int lower2 = checkArray[i - 2];

其他任务类似。

接下来你有一些边界条件问题。第一次通过您的循环i是 1,因此checkArray[i-2]尝试取出索引 -1 处的元素。数组索引从 0 开始,所以这会引发异常。而是从int i = 2. 索引最多比数组长度小一。您从checkArray.length. 既然你想做checkArray[i+2],你就需要那个i < checkArray.length - 2,所以让它成为你在for循环中的条件。

不,等等。您的第三个问题不是错误,只是逻辑过于复杂:您将五个连续的整数取出到lower2lower1mid和。你只需要四个。所以不要让事情比需要的更复杂 delete 。现在你只需要,所以你可以而且必须允许。现在您只需要条件的前半部分,这使得语句更易于阅读和理解。upper1upper2upper2checkArray[i + 1]i < checkArray.length - 1ifif

而已。


推荐阅读