有没有办法在Java中使用整数枚举初始化数组

时间:2012-10-18 22:34:00

标签: java arrays

在Java中是否有办法做类似的事情:

int foo [] = new int [0..n];

foo [0] = 0

foo [3] = 3

3 个答案:

答案 0 :(得分:3)

不使用内置语言功能。当然,你可以轻松编写一个方法来实现它,但是没有任何内置的东西 - 我怀疑它很少有用,它也不是很多第三方实用程序库(例如Guava)。

答案 1 :(得分:2)

我不这么认为,但你可以使用一个简单的for循环:

int foo[n];

for(int i = 0; i < n; i++) foo[i] = i;

如果你想要一个方法尝试这样的事情:

public void initialize(int[] array, int start, int end) {
    int array_length = array.length;
    if (end > array_length) end = array_length;

    for (int i = start; i < end; i++) {
        array[i - start] = i;
    }
}

// In any other point in your code
int foo[] = new int[6];
initialize(foo, 0, 10);

另一种方法是使Range类添加此功能:

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Range implements Iterable<Integer> {
    Integer array[];

    public Range(int size) {
        this(0, size - 1);
    }

    public Range(int start, int end) {
        array = new Integer[end - start];

        for (int i = start; i < end; i++) {
            array[i - start] = i;
        }
    }

    public List<Integer> asList() {
        return Arrays.asList(array);
    }

    @Override
    public Iterator<Integer> iterator() {
        return Arrays.asList(array).iterator();
    }
}

以下是一个用法示例:

Range range = new Range(4, 10);

for (int i : range) {
    System.out.println(i);
}

我确信这段代码可以改进,但不值得。

答案 2 :(得分:1)

int n = 10;
int[] arr = new int[n+1];

for循环具有灵活的语法,因此您甚至可以这样做:

for ( int i = 0; i < arr.length; arr[i] = i++ );

P.S。
如果您想要的代码少于上述代码,则可以执行以下操作:

int i = 0;
for ( int c : arr ) { arr[i] = i++; }

P.P.S。
尽管这些代码片段简洁,但对我来说它们似乎不清楚,并且闻起来很糟糕。