我需要找到一种在Java中创建新数组的方法,该数组将在已存在的数组的值之间插入中间值。我可以创建一个所需长度的新数组,但我不确定如何继续。具体来说,我需要编写一个方法,将整数数组作为输入,并返回一个整数数组3次(减2),只要输入数组。返回的数组应该是高清数组,两个值之间的值为1/3和2/3。例如,给定输入数组
{400,500,600}
它应该返回
{400,433,466,500,533,566}
任何长度数组。有什么建议?
答案 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]