Java填充数组

时间:2014-05-09 17:44:43

标签: java arrays methods int

如何填充数组,例如,如果你有以下数组。

int[] arr = new int[5];
arr[0] = 1;
arr[1] = 3;
arr[2] = 7;
arr[3] = 2;
arr[4] = -4;

所以它看起来像

arr = {1, 3, 7, 2, -4};

你会将它传递给你的方法以获得

的结果
arr = {1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4};

这样你就可以填补数字空白。我想假设我不知道数组传入多长时间才能使它成为一种更通用的方法。

我现在的方法现在看起来像......

public static void fillArray(int[] numbers){
    int length = numbers.length;
    for(int i = 0; i < numbers.length - 1; i ++){
        if(numbers[i] <= numbers[i + 1]){
            length += numbers[i + 1] - numbers[i];
        }else if(numbers[i + 1] < numbers[i]){
            length += numbers[i + 1] - numbers[i];
        }

    }
}

我有足够的时间来确定新阵列的大小。我认为它应该有效,但我总是倾向于提供一些意见和建议。

4 个答案:

答案 0 :(得分:3)

看起来像家庭作业,只提供算法:

  • 浏览当前数组的元素。
  • 获取数组中元素之间的距离(绝对差值)。
  • 总结距离。
  • 创建一个新数组,其长度为距离的总和。
  • 使用第一个数组的元素填充新数组,填补空白
  • 返回阵列。

答案 1 :(得分:1)

像Luiggi Mendoza所说,看起来像HW,所以这是另一种算法:

  • 将第一个元素插入到整数列表中。
  • 循环其余元素。
  • 对于每两个数组元素X [i-1],X [i],将缺少的整数插入列表
  • 循环后
  • - 使用guava将List转换为数组。

答案 2 :(得分:-2)

这很有效。只检查数组大小&lt; 2为了安全。

public static void main(String[] args) {
    int[] arr = {1, 3, 7, 2, -4};

    Integer[] result = fillArray(arr);

    for (int i = 0; i < result.length; i++) {
        System.out.println(result[i]);
    }
}

private static Integer[] fillArray(int[] arr) {
    List<Integer> list = new ArrayList<Integer>(); 

    list.add(arr[0]);

    for (int i = 1; i < arr.length; i++) {
        int prevItem = arr[i-1];
        int gap = arr[i] - prevItem;
        if(gap > 0){
            fillGap(list, prevItem, gap, 1);
        } else if(gap < 0){
            fillGap(list, prevItem, gap, -1);
        }
    }

    return list.toArray(new Integer[0]);

}

private static void fillGap(List<Integer> list, int start, int gap, int delta) {
    int next = start+delta;
    for (int j = 0; j < Math.abs(gap); j++) {
        list.add(next);
        next = next+delta;
    }   
}

答案 3 :(得分:-3)

尝试

import java.util.ArrayList;
import java.util.List;


public class ArrayGap {

    public static void main(String[] args) {
        int[] arr = {1, 3, 7, 2, -4};
        int high, low;
        List<Integer> out = new ArrayList<Integer>();
        for(int i=0; i<arr.length - 1;  i++){
            high = arr[i];
            if(arr[i] < arr[i+1]){
                for(int j=arr[i]; j<arr[i+1]; j++){
                    out.add(j);
                }
            } else {
                for(int j=arr[i]; j>=arr[i+1]; j--){
                    out.add(j);
                }
            }

        }
        System.out.println(out);
    }

}