如何在Java中声明全局数组与变量?附前缀和实现需求
修正后的前缀和实现
针对你的需求,调整后的代码如下,同时修复了原代码中前缀和计算的逻辑错误:
package Arrays; public class PrefixSum { // 声明为类的静态成员变量,实现全局访问 private static int[] aux; static void sumArray(int arr[]) { int n = arr.length; // 校验aux长度是否与输入数组一致,不一致则重新初始化 if (aux == null || aux.length != n) { aux = new int[n]; } // 正确计算前缀和 aux[0] = arr[0]; for (int i = 1; i < n; i++) { aux[i] = aux[i - 1] + arr[i]; } } static int getSum(int arr[], int start, int end) { // 先确保前缀和数组已正确初始化并计算完成 sumArray(arr); if (start == 0) { return aux[end]; } // 补充分号,修复语法错误 return aux[end] - aux[start - 1]; } public static void main(String[] args) { int arr[] = { 2, 5, 7, 3, 4, 5, 3 }; int start = 2; int end = 5; System.out.print(getSum(arr, start, end)); } }
关键修改说明
- 全局访问
aux:将aux定义为类的静态私有成员变量,类内所有静态方法都能访问它,同时用private限制外部直接修改,保证数据安全性。 - 匹配数组长度:在
sumArray中增加判断,只有当aux未初始化或长度与输入数组不一致时,才重新创建数组,确保两者长度始终匹配。 - 修复前缀和逻辑:原代码中
curr变量未更新,导致计算出的前缀和完全错误,调整为使用aux[i-1] + arr[i]的方式,正确累加前缀和。 - 修复语法错误:补全
getSum方法中return语句的分号,解决编译报错问题。
内容的提问来源于stack exchange,提问作者K3rn3l__P4n1c
相关产品推荐
相关产品推荐

