如何在Java中声明全局数组和变量?



我是Java的新手,我正在尝试实现前缀和

package Arrays;
public class prefixSum {
static void sumArray(int arr[]) {
int n = arr.length;
int aux[] = new int[n];
int curr = arr[0];
aux[0] = curr;
for (int i = 1; i < n; i++) {
aux[i] = arr[i] + curr;
}
}
static int getSum(int arr[],int start,int end){
int n=arr.length;
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[]数组的长度与arr[]的长度相同。

可以将其设置为类的静态成员,如下所示:

public class PrefixSum {
private static int[] aux;
...
}

但是,请记住以下内容:

  • 你的数组参数声明是错误的,你应该声明它为int[] aux而不是int aux[]
  • 你应该尽可能少地使用全局状态,它们是危险的,并且会在将来导致你的问题,例如,如果程序在多个线程上运行。如果可能,本地状态总是更好的。
  • 最后但并非最不重要,主要是供参考- java中的数组是通过引用而不是通过值传递的,这意味着当你从函数返回一个数组时,你返回的是实际的数组,而不是它的副本。

所以我的建议是这样的:

public class PrefixSum {
static int[] sumArray(int[] arr) {
int n = arr.length;
int[] aux = new int[n];
int curr = arr[0];
aux[0] = curr;
for (int i = 1; i < n; i++) {
aux[i] = arr[i] + curr;
}
return aux;
}
static int getSum(int[] arr, int start, int end) {
int[] aux = 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[]数组并在main方法中初始化它:

public class prefixSum {
static int[] aux;
...
public static void main(String[] args) {
int[] arr = { 2, 5, 7, 3, 4, 5, 3 };
aux = new int[arr.length];
...
}

并从sumArray方法中删除aux数组声明。

注:: Java关于数组声明的约定类似于int[] arr而不是int arr[]

阅读更多关于Java代码约定的内容。

在重新格式化你的代码后,它将是这样的(我没有测试过的功能):

public class prefixSum {
static int aux[];
static void sumArray(int[] arr) {
int n = arr.length;
int curr = arr[0];
aux[0] = curr;
for (int i = 1; i < n; i++) {
aux[i] = arr[i] + curr;
}
}
static int getSum(int[] arr, int start, int end) {
int n = arr.length;
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};
aux = new int[arr.length];
int start = 2;
int end = 5;
System.out.print(getSum(arr, start, end));
}
}

最新更新