在Java数组中创建中间值

时间:2014-03-02 17:37:51

标签: java arrays

我需要找到一种在Java中创建新数组的方法,该数组将在已存在的数组的值之间插入中间值。我可以创建一个所需长度的新数组,但我不确定如何继续。具体来说,我需要编写一个方法,将整数数组作为输入,并返回一个整数数组3次(减2),只要输入数组。返回的数组应该是高清数组,两个值之间的值为1/3和2/3。例如,给定输入数组

{400,500,600}

它应该返回

{400,433,466,500,533,566}

任何长度数组。有什么建议?

4 个答案:

答案 0 :(得分:1)

public int[] getValues(int[] a){
    int [] b = new int[a.length*3-3];

    for(int i=0; i<a.length()-1; i++){
        b[i*3]=a[i];
        b[i*3+1]=a[i]+(a[i+1]-a[i])/3;
        b[i*3+2]=a[i]+(a[i+1]-a[i])/3*2;
    }
}

答案 1 :(得分:1)

这将是我对给定问题的解决方案

public static int[] highdef(int[] input) {
    int[] result = new int[input.length * 3 - 2];

    for (int i = 0; i < input.length - 1; i++) {
        result[i * 3] = input[i];
        result[i * 3 + 1] = input[i] + (Math.abs(input[i + 1] - input[i]) / 3);
        result[i * 3 + 2] = input[i] + (Math.abs(input[i + 1] - input[i]) / 3) * 2;
    }
    result[result.length - 1] = input[input.length - 1];
    return result;
}

这个想法是你计算每个元素和下一个元素之间的差异,并计算差值的1/3和2/3,以将其添加到原始值。这是动态的,因为它使用传入输入数组的大小。

答案 2 :(得分:0)

List<Integer> list= new ArrayList<Integer>; list.add(400); list.add(500); list.add(600);

在那里你可以迭代列表并添加值......

        list.add(1,433);
        list.add(2,466);
        list.add(4,533);
        list.add(5,566);

答案 3 :(得分:0)

我做了一个递归的,只使用数组(没有集合),并留下中间System.out.println(),以便你可以看到它是如何工作的。

public class App {

    public static void main(String[] args) {
        int[] array = {400, 500, 600, 800};
        int[] newArray = new int[array.length * 3 - 2];
        makeArray(array, newArray, 0);

        System.out.println("\nResult: " + Arrays.toString(newArray));
    }

    public static void makeArray(int[] array, int[] newArray, int offset) {

        System.out.println("Recursion: " + (offset/3+1));
        System.out.println("--> array: "+Arrays.toString(array));
        System.out.println("--> newArray: "+Arrays.toString(newArray));

        if (array.length == 1) {
            System.arraycopy(array, 0, newArray, newArray.length-1, array.length);
        } else {
            int[] arrayPart = {array[0], array[1]};
            int[] rest = new int[array.length - 1];

            System.arraycopy(array, 1, rest, 0, rest.length);

            int third = (int)((arrayPart[1] - arrayPart[0])/3);
            int[] appendArray = {arrayPart[0], arrayPart[0]+third, arrayPart[0]+third*2};

            System.arraycopy(appendArray, 0, newArray, offset, appendArray.length);
            makeArray(rest, newArray, offset + 3);
        }
    }
}

这是输出:

Recursion: 1
--> array: [400, 500, 600, 800]
--> newArray: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Recursion: 2
--> array: [500, 600, 800]
--> newArray: [400, 433, 466, 0, 0, 0, 0, 0, 0, 0]
Recursion: 3
--> array: [600, 800]
--> newArray: [400, 433, 466, 500, 533, 566, 0, 0, 0, 0]
Recursion: 4
--> array: [800]
--> newArray: [400, 433, 466, 500, 533, 566, 600, 666, 732, 0]

Result: [400, 433, 466, 500, 533, 566, 600, 666, 732, 800]