2015-04-02 4 views
1

В Java, есть ли способ создать массив элементов в диапазоне?Как создать массив элементов в диапазоне?

Например,

new int[] {1:10}, which should be equivalent to, 
new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 

Я думал, если нам нужно создать массив больших элементов диапазона (5-1000), а не писать его как 5, 6, ..., 1000, если есть способ как 5: 1000.

ответ

1

Существует не встроенная функция языка, но вы можете легко создать метод, который делает это:

public static int[] createIntRangeArray(int start, int end) { 
    int[] result = new int[end-start+1]; 
    for(int i = start; i <= end; i++) 
     result[i-start] = i; 
    return result; 
} 

, а затем:

createIntRangeArray(1, 10) 
// is equivalent to 
new int[] {1,2,3,4,5,6,7,8,9,10} 
+0

Там может быть встроенный * * метод, что я не в курсе, особенно с потоками Java 8. – immibis

8

В Java 8

int[] array = IntStream.rangeClosed(1, 10).toArray(); 
+0

Отлично, увы, я использую среду Java 7 на производстве! – Prakhar

1
class ArrayGenerator { 
    public static int[] generateArray(int start, int end) { 
     int[] array = new int[end-start+1]; 
     for(int i=start;i<=end;i++) { 
      array[i-start] = i; 
     } 
     return array; 
    } 
} 

// это может использоваться как

int start = 5; 
    int end = 10; 
    int[] generatedArray = ArrayGenerator.generateArray(start,end); 

    for(int i : generatedArray) { 
     System.out.println(i); 
    } 
+0

Диапазон имеет начальный и конечный индексы. Вы не должны считать, что он всегда начинается с 0. – Prakhar

+0

Я, понял. Теперь изменились. :) Благодаря – Nielarshi

1

Рассмотрите возможность написания отдельного метода, содержащего цикл, который инициализирует ваш массив.

public int[] createArrayWithRange(int startIncl, int endIncl) { 
    int[] nums = new int[endIncl - startIncl + 1]; 
    for (int i = 0; i < (endIncl - startIncl + 1) ; i++) { 
     nums[i] = i + startIncl; 
    } 
    return nums; 
} 
0

Мое предложение:

public List<Integer> generateIntTab(int size){ 
     List<Integer> x = new ArrayList<Integer>(); 
     for(int i = 0 ; i < size; i++){ 
      x.add((i << 1)-i+1); 
     } 
     return x; 
    } 

Его немного медленнее стандартной функции JDK8, которые дают @Reimeus