一开始是开了一个二维数组 保存每一个位置所对应的值 结果发现过于啰嗦 而且过于臃肿 导致我出错后一直找不到那里错 所以参考了其他解法 改写原来的方法

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int w = 1;
        int[] arr = new int[100002];//会被覆盖
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n > 0) {
            int num = sc.nextInt();
            // 将数据放进数组中 maxsum 统计最大值 flag 临时最大值
            int maxSum = -9999;
            int flag = 0;//一段数据的极大值 不一定为最大值
            int star = 0;//开始位置 从0 开始
            int end = 0;//结束位置 从0 开始
            int z = 0;//记录正确的位置
            for (int i = 0; i < num; i++) {
                arr[i] = sc.nextInt();// 读取数据 然后进行处理
                flag += arr[i];
                if (flag > maxSum) {
                    maxSum = flag;
                    end = i;
                    star = z;
                }
                if (flag < 0) {// 归零处理 根据判断 此处arr[i]为负数
                    flag = 0;
                    z = i + 1;//z仅在这里修改
                }
            }
            System.out.println("Case "+(w++)+":");
            System.out.println(maxSum+" "+(star+1)+" "+(1+end));
            if (n != 1) 
                System.out.println();
            n--;
        }
    }
}