在 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;
}
您也可以将数组的大小作为参数传递。
我想编写一个函数,根据我选择的输入给我一个不同的 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;
}
您也可以将数组的大小作为参数传递。