开局没考虑好0行0列不应该存值,只能拿try防御一下了

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    private static long safeGet(long[][] num, int i, int j){
        try{
            return num[i][j];
        }catch(Exception e){
            return 0;
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int q = in.nextInt();
        long[][] input =  new long[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                input[i][j] = in.nextInt();
            }
        }
        long[][] dp = new long[n][m];
        dp[0][0] = input[0][0];
        for (int i = 1; i < n; i++) dp[i][0] = input[i][0]+dp[i-1][0];
        for (int j = 1; j < m; j++) dp[0][j] = input[0][j]+dp[0][j-1];
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                dp[i][j] = dp[i][j - 1] + dp[i - 1][j] + input[i][j] - dp[i - 1][j - 1];
            }
        }
        //操作开始
        int x1, x2, y1, y2;
        for (int i = 0; i < q; i++) {
            x1 = in.nextInt() - 1;
            y1 = in.nextInt() - 1;
            x2 = in.nextInt() - 1;
            y2 = in.nextInt() - 1;
            long a = dp[x2][y2];
            long b = 0, c = 0, d = 0;
            b = safeGet(dp,x2,y1 - 1);
            c = safeGet(dp,x1-1,y2);
            d = safeGet(dp,x1-1,y1 - 1);
            System.out.println(a - b - c + d);
        }
    }
}