【问题标题】:Is there a way to initialize an array with an enumeration of integers in Java有没有办法用Java中的整数枚举初始化数组
【发布时间】:2012-10-09 12:14:48
【问题描述】:

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

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

foo[0] = 0

foo[3] = 3

【问题讨论】:

标签: java arrays


【解决方案1】:

不使用内置语言功能。当然,您可以轻松地编写一个方法来执行此操作,但没有内置任何内容 - 我怀疑它很少有用,因此在许多第三方实用程序库(例如 Guava)中也没有。

【讨论】:

  • 最接近的基于 Guava 的替代方案是 Range.closed(0, 3).asSet(DiscreteDomains.integers()).asList()。这是一口,但那是因为你真的应该自己做。
【解决方案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);
}

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

【讨论】:

  • +1,但应该是[n+1]i &lt;= n。至少,我希望像 OP 的 new int[0..n] 这样的符号将包括两个端点,0n
  • 是的,你是对的,但将 n 声明为 n+1 xD 会更容易 无论如何,这是一个简单的例子,说明他正在寻找的东西是不可能的。无论如何感谢您的评论;)
【解决方案3】:
int n = 10;
int[] arr = new int[n+1];

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

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

附:
如果你想要比上面更少的代码,你可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多