我对java int数组初始化有疑问。我想根据条件设置宽度,但是当我尝试编译它时说错误的声明。我的数组初始化有什么问题吗?
int []widths;
if(condition 1)
{
widths = {1,4,5,3};
}
if(condition 2)
{
widths = {1,9,5,3,2};
}
method1.setWidth(widths ); //method that take int array as argument.
答案 0 :(得分:3)
widths = {1,4,5,3}
仅在它是数组变量声明的一部分时才有效。
将您的代码更改为:
int[] widths;
if(condition 1) {
widths = new int[] {1,4,5,3};
}
if(condition 2) {
widths = new int[] {1,9,5,3,2};
}
method1.setWidth(widths);
如果你的两个条件都不成立,你还应该考虑给widths
数组一个默认值,因为你的代码不会通过编译。
可能是这样的:
int[] widths = null;
if(condition 1) {
widths = new int[] {1,4,5,3};
}
if(condition 2) {
widths = new int[] {1,9,5,3,2};
}
if (widths != null) {
method1.setWidth(widths);
}
答案 1 :(得分:0)
@Eran给出的答案是正确的。但是,如果您仍然需要一个数组并且您事先并不知道该数组将包含多少元素,请尝试查看List: <T> T[] toArray(T[] a)
方法。
这样,您的示例应该变为:
List<Integer> list = new ArrayList<Integer>();
if (condition 1) {
// Fullfil the list in some way
} else if (condition 2) {
// Fullfil the list in some other way
}
// The array given in input to toArray is needed cause type erasure of
// generics at compile time.
method1.setWidth(list.toArray(new Integer[list.size()]));
显然,你不能以这种方式使用原始类型数组。