java 我在函数的顶部用零初始化了一个变量,所以在循环过程中值会改变?

mwg9r5ms  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(133)
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变量,然后输出是错误的,然后在第二个嵌套循环中,为什么我必须用零初始化它才能得到正确的答案?

8ulbf1ek

8ulbf1ek1#

您在函数中声明cursum,因此它的作用域是整个函数,包含所有循环。它不会在进入内部循环时重置为0,因为它的作用域在该循环之外。
你可以把它的声明移到第二个循环中,就在你的“k”循环之前,这将把它的作用域限制在k上的迭代,看起来就是你想要的部分和。
这将取代你

cursum = 0;

int cursum = 0;
yebdmbv4

yebdmbv42#

你在每次迭代currsum += numbers[k];时都会改变currsum,所以要检查每个新的结果,你必须重置currsum,你不需要在循环之前声明它,你可以在设置它为0的地方声明它。
提示:您也不必初始化startend变量,您可以使用ij

相关问题