在这种情况下,我想在此数组中添加两个数字,以便在添加时获得特定的总和,比方说,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));
}
答案 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,然后每步都将它们递增。因此,您只比较数组中的相邻位置:
a[0] + a[1]
a[1] + a[2]
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