在 Java 的函数中使用数组初始值设定项

Use Array Initializers in a Function in Java

我想编写一个函数,根据我选择的输入给我一个不同的 int 数组 testArray 作为输出。在这个例子中,我想选择 number = 0,结果是 testArray = {1,2,3,4,5}。当我给 testArray 值时,我得到这个错误:

Array constants can only be used in initializers

public class ArrayExample{  
    
    public static void main(String args[]){
        int number = 0;
        int[] newArray = new int[5];
        newArray = getValues(number);
    }
    

    public static int[] getValues(int number) {
        
        int[] testArray = new int[5];
            
            if(number == 0) {
                testArray  = {1,2,3,4,5}; 
            }
            else if(number == 1) {
                testArray  = {2,3,4,5,6}; 
            }
            else if(number == 2) {
                testArray  = {3,4,5,6,7}; 
            }
            else if(number == 3) {
                testArray  = {4,5,6,7,8}; 
            }       
            else{
                testArray  = {5,6,7,8,9}; 
            }   

            
        return testArray;
    }

    
}

如错误中所述Array constants can only be used in initializers

有效代码

int[] arr = {1,2,3,4,5};

密码错误

int[] arr;
arr = {1, 2, 3, 4, 5};

添加new int[]关键字使代码可编译

testArray = new int[] {1, 2, 3, 4, 5};

但最好使用循环以这种方式初始化数组

public static int[] getValues(int number) {
    int[] testArray = new int[5];

    for(int i = 0; i < testArray.length; i++) {
        testArray[i] = number + i + 1;
    }

    return testArray;
}

或流

public static int[] getValues(int number) {
    return IntStream.range(number + 1, number + 6).toArray();
}

数组声明的语法仅在声明新数组时有效。您可以使用括号中的值分配给现有数组变量,但您必须添加新的和类型:

testArray = new int[]{1,2,3,4,5};

似乎应该推断类型,但此功能早于类型推断。

这里可以声明一次,根据传入的数字分配一个子范围:

static int[] getValues(int number) {
    if (number > 4 || number < 0) number = 4;
    int[] testArray = {1,2,3,4,5,6,7,8,9};
    return Arrays.copyOfRange(testArray, number, number + 5);
}

我们不能使用以下语法为数组赋值。

int[] newArray = new int[5];
testArray  = {1,2,3,4,5}; 

要解决您可以使用的问题

  testArray  = new int[] {1,2,3,4,5}; 

您只能在初始化程序中使用语法 {1, 2, 3, 4, 5}(初始化程序是用于定义新变量并为其赋值的代码)。如果您不使用初始值设定项,则需要使用语法 new int[]{1, 2, 3, 4, 5}

您可以按如下方式重构您的代码:

public static int[] getValues(int number) {
   switch (number) {
       case 0: return new int[]{1,2,3,4,5}; 
       case 1: return new int[]{2,3,4,5,6}; 
       case 2: return new int[]{3,4,5,6,7}; 
       case 3: return new int[]{4,5,6,7,8}; 
       default: return new int[]{5,6,7,8,9}; 
   }
}

请注意,对于这种情况,我还使用了一个更具可读性的开关。但是如果你更喜欢的话,你仍然可以使用 if else if else。

您也可以在代码后更改main的方法

 int[] newArray = new int[5];
 newArray = getValues(number);

 int[] newArray = getValues(number);

事实上你不需要创建一个你不使用的空数组(new int[5]),你可以直接赋值getValues方法返回的数组。

使用 Arrays.setAll

像这样尝试
for (int i = 0; i < 5; i++) {
    int [] result = getValues(i);
    System.out.println(Arrays.toString(result));
}

打印

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
[4, 5, 6, 7, 8]
[5, 6, 7, 8, 9]

方法

public static int[] getValues(int number) {
    int[] array = new int[5];
    Arrays.setAll(array, i->number+i+1);
    return array;
}

您也可以将数组的大小作为参数传递。