在数组中添加数字

时间:2018-07-12 14:14:58

标签: java algorithm debugging

在这种情况下,我想在此数组中添加两个数字,以便在添加时获得特定的总和,比方说,4。我还想输出要添加的索引以获得该特定的总和,只是为了看到我的代码的内部运作。我究竟做错了什么?

public static int addingNumbers(int[] a) {
    int i1 = 0, i2 = 0;

    for(int i = 0, j = i + 1; i < a.length && j < a.length; i++, j++) {
        if(a[i] + a[j] == 4) { // index 0 and index 2 when added gives you a sum 4
            i1 = i;
            i2 = j;
        }
    }   
    System.out.println("The indices are " + i1 + " and " + i2);
    return i1;
}

public static void main(String args[]) {
    int[] a = {1, 2, 3, 4, 5, 6};
    System.out.println(addingNumbers(a));
}

5 个答案:

答案 0 :(得分:1)

它永远不可能是== 4,因为1 + 2 = 3然后2 + 3 = 5。因此它什么也没做。

答案 1 :(得分:1)

您所犯的错误是仅使用一个循环遍历数组一次:

for(int i = 0, j = i + 1; i < a.length && j < a.length; i++, j++) {

在循环中,将i设置为0,将j设置为1,然后每步都将它们递增。因此,您只比较数组中的相邻位置:

  1. 迭代:a[0] + a[1]
  2. 迭代:a[1] + a[2]
  3. 迭代:a[2] + a[3]

等pp

由于数组中没有两个相邻的元素,它们之和不超过4,因此您将永远不会输入if(a[i] + a[j] == 4)i1,因此循环结束后i2仍为0。

要比较每个数组元素,应使用2个嵌套循环:

public static int addingNumbers(int[] a) {
    int i1 = -1, i2 = -1;

    for(int i = 0; i < a.length ; i++) {
            for(int j = i+1; j < a.length ; j++) {
                if(a[i] + a[j] == 4) { // index 0 and index 2 when added gives you a sum 4
                    i1 = i;
                    i2 = j;
                }
            }
    }   
    if(i1>=0 && i2 >=0) {
        System.out.println("The indices are " + i1 + " and " + i2);
    }
    return i1;
}

请注意,这只会打印出最后检测到的2个总和为4的索引。如果您希望能够检测出多个可能的解决方案并将其打印出来,例如可以将System.out.println移至{{ 1}}块。

答案 2 :(得分:0)

此算法将永远无法将a [0]添加到a [2],因为当您将j = i + 1放进去时,它将始终为0 + 1然后是1 + 2 ...相邻拖曳的总和数字永远不会成对。

另一件事是停止循环的条件必须为j

尝试说明您希望从算法中获得的更多信息。

答案 3 :(得分:0)

您是否故意使这个复杂化? 试图弄清楚您打算执行此任务的意图。

你为什么不做(这是伪的):

for length of i {
 if (a[i] + a[i+1] == 4) {
   System.out.println("The indices are " + a[i]  + " and " + a[i+1]);
 }
}

答案 4 :(得分:0)

您的代码中存在逻辑错误。您在代码中检查的总和永远都不会。 我添加了一些调试输出以便于检查:

    public static int addingNumbers(int[] a) {
    int i1 = 0, i2 = 0;

    for(int i = 0, j = i + 1; i < a.length && j < a.length; i++, j++) {
        int sum = a[i] + a[j];
        System.out.println(sum);
        if(sum == 4) { // index 0 and index 2 when added gives you a sum 4
            i1 = i;
            i2 = j;
        }
    }   
    System.out.println("The indices are " + i1 + " and " + i2);
    return i1;
}

输出为:3 5 7 9 11 索引是0和0 0