public class maxsubarraysum {
public static void main(String[] args) {
int numbers[] = { 1, -2, 6, -1, 3 };
printmsasum(numbers);
}
public static void printmsasum(int numbers[]) {
int currsum=0;//declared and initialized
int maxsum = Integer.MIN_VALUE;
for (int i = 0; i < numbers.length; i++) {
int start = i;
for (int j = i; j < numbers.length; j++) {
int end = j;
currsum = 0; //here is what i dont understand why i have to again give it zero to run it properly what its is called ? means am i missing any concept? pls help in loops does value changes?
for (int k = start; k <= end; k++) {
currsum += numbers[k];
}
System.out.println(currsum);
if (maxsum < currsum) {
maxsum = currsum;
}
}
}
System.out.println("the maximum sub array sum is = " + maxsum);
}
}
我试过只声明和用零初始化currsum变量,然后输出是错误的,然后在第二个嵌套循环中,为什么我必须用零初始化它才能得到正确的答案?
2条答案
按热度按时间8ulbf1ek1#
您在函数中声明cursum,因此它的作用域是整个函数,包含所有循环。它不会在进入内部循环时重置为0,因为它的作用域在该循环之外。
你可以把它的声明移到第二个循环中,就在你的“k”循环之前,这将把它的作用域限制在k上的迭代,看起来就是你想要的部分和。
这将取代你
与
yebdmbv42#
你在每次迭代
currsum += numbers[k];
时都会改变currsum
,所以要检查每个新的结果,你必须重置currsum
,你不需要在循环之前声明它,你可以在设置它为0的地方声明它。提示:您也不必初始化
start
和end
变量,您可以使用i
和j