Java填充数组
如何填充数组,例如,如果有以下数组Java填充数组,java,arrays,methods,int,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}; 所以你基本上是在填补数字空白。我想这样做是因为我不知道传入的数组
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];
}
}
}
publicstaticvoidfillarray(int[]数字){
int length=number.length;
对于(int i=0;i 如果(数字[i]看起来像家庭作业,只提供算法:
- 浏览当前数组的元素
- 获取数组中元素之间的距离(绝对差)
- 总结一下距离
- 创建一个长度为距离之和的新数组
- 使用第一个数组的元素填充新数组并填充间隙
- 返回数组
就像Luiggi Mendoza说的,看起来像HW,所以这里有另一个算法:
- 将第一个元素插入整数列表
- 在其余元素上循环
- 对于每两个数组元素X[i-1],X[i],将缺少的整数插入列表
- 循环后-用于将列表转换为数组
试试看
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);
}
}
import java.util.ArrayList;
导入java.util.List;
公共类数组{
公共静态void main(字符串[]args){
int[]arr={1,3,7,2,-4};
int高,低;
List out=new ArrayList();
对于(inti=0;i这是有效的。只需检查数组大小是否小于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;
}
}
publicstaticvoidmain(字符串[]args){
int[]arr={1,3,7,2,-4};
整数[]结果=填充数组(arr);
for(int i=0;i0){
fillGap(列表,前一项,gap,1);
}否则,如果(间隙<0){
fillGap(列表,前一项,gap,-1);
}
}
返回list.toArray(新整数[0]);
}
私有静态void fillGap(列表、int start、int gap、int delta){
int next=开始+增量;
对于(int j=0;j
您需要发布您的尝试。仅询问如何操作是不够的。我实际上是在尝试创建一个fillArray方法,该方法将填充第一个数组的数字间隙,以获得第二个数组。@user3529923 Ahh。好的。那么您尝试了什么?您被困在哪里?有什么限制(如果有的话)您是否正在进行实施?我提供了到目前为止我所拥有的,以确定我的新数组应该有多长。是的,但它返回的是INTEGER[],而不是int[]。嗯,这会有问题。不是downvoter,但我猜这会收到downvoter,因为您正在解决OP的家庭作业,这会导致出现新的僵尸leecher编码器(我们在这个世界上不需要更多,相反,我们应该消除它们)。