带有测试用例的递归

时间:2015-12-04 20:43:16

标签: recursion

我正在尝试编写以下递归问题。每次我运行测试用例时,它都会在else if行上给出超出范围的错误。如何修复出界错误。根据代码是测试用例。

static boolean allEqual(int[] a, int start, int end) {

 if( a[start + 1]>=a.length){return false;}   
 if (start == end && a[start] == a[end]) {
        return true;
    }
    ///recursive
    else if (a[start] == a[start + 1]) // Error over here 
{  
        return allEqual(a, start + 1, end);
    }
    // else if (start == end && a[start] == a[end]) {
    //   return true;
    else {
        return false;
    }

}
// Following is the test case
    Random rng = new Random(SEED);
    for(int i = 0; i < RUNS; i++) {
        int[] a = new int[i];
        int v = rng.nextInt();
        for(int j = 0; j < i; j++) {
            a[j] = v;
        }
        assertTrue(rp.allEqual(a, 0, i-1));
        for(int j = 1; j < i; j++) {
            assertTrue(rp.allEqual(a, j, i-1));
            assertTrue(rp.allEqual(a, 0, j));
            a[j] = a[j] - 1;
            assertTrue(rp.allEqual(a, 0, j-1));
            assertTrue(rp.allEqual(a, j + 1, i-1));
            assertFalse(rp.allEqual(a, 0, i-1));
            a[j] = a[j] + 2;
            assertTrue(rp.allEqual(a, 0, j-1));
            assertTrue(rp.allEqual(a, j + 1, i-1));
            assertFalse(rp.allEqual(a, 0, i-1));
            a[j] = a[j] - 1;
        }
    }

0 个答案:

没有答案