这是程序任务:
编写一个名为collapse的方法,它接受一个整数数组作为参数,并返回一个新数组,其中包含用该对的总和替换每对整数的结果。
例如,如果名为list的数组存储值
{7, 2, 8, 9, 4, 13, 7, 1, 9, 10}
然后调用collapse(list)
应该返回一个包含以下内容的新数组:
{9, 17, 17, 8, 19}
。
原始列表中的第一对折叠为9(7 + 2),第二对折叠为17(8 + 9),依此类推。如果列表存储奇数个元素,则最终元素不会折叠。
例如,如果列表为{1, 2, 3, 4, 5}
,则调用将返回{3, 7, 5}
。您的方法不应更改作为参数传递的数组。
这是我目前编写的程序:
public static int[] collapse(int[] a1) {
int newArrayLength = a1.length / 2;
int[] collapsed = new int[newArrayLength];
int firstTwoSums = 0;
for (int i = 0; i < a1.length-1; i++) {
firstTwoSums = a1[i] + a1[i+1];
collapsed[collapsed.length-1] = firstTwoSums;
}
return collapsed;
}
我传入了一个{7, 2, 8, 9, 4, 13, 7, 1, 9, 10}
数组,我想用{9, 17, 17, 8, 19}
替换这个数组
注意: {9, 17, 17, 8, 19}
将通过我编写的for循环获得。
目前,我无法将我获得的整数添加到“折叠”数组中。如果你可以帮助我,或者至少给我一些如何做到这一点的指导,那将是一个很好的帮助。
提前致谢!
答案 0 :(得分:0)
使用
collapsed[collapsed.length-1] = firstTwoSums;
您的数字总和将始终放在折叠数组的相同索引中,因为collapsed.length - 1是一个常量值。
尝试创建一个从零开始的新变量,每次向折叠添加总和时都可以递增。例如,
int j = 0;
for(...) {
...
collapsed[j++] = firstTwoSums;
}
答案 1 :(得分:0)
首先,您必须了解发生了什么。
您有一个特定size
的数组,其大小可以是even
或odd
。这很重要,因为您使用a1.length/2
来设置new array
的大小,因此您还必须检查奇数和偶数值以设置大小,否则它将无法用于奇数大小的数组。尝试一些案例以便更好地理解。
这是一种做法。
public static int[] collapseThis(int[] array) {
int size = 0;
if(isEven(array.length))
size = array.length/2;
else
size = array.length/2+1;
int[] collapsedArray = new int[size];
for(int i=0, j=0; j<=size-1; i++, j++) {
if(j==size-1 && !isEven(array.length)) {
collapsedArray[j] = array[2*i];
}
else {
collapsedArray[j] = array[2*i]+array[2*i+1];
}
}
return collapsedArray;
}
private static boolean isEven(int num) {
return (num % 2 == 0);
}
答案 2 :(得分:0)
我认为这是一个方便的答案。
public static void main(String[] args){
int[] numbers = {1,2,3,4,5};
int[] newList = collapse(numbers);
System.out.println(Arrays.toString(newList));
}
public static int[] collapse(int[] data){
int[] newList = new int[(data.length + 1)/2];
int count = 0;
for (int i = 0; i < (data.length / 2); i++){
newList[i] = data[count] + data[count + 1];
System.out.println(newList[i]);
count = count + 2;
}
if (data.length % 2 == 1){
newList[(data.length / 2)] = data[data.length - 1];
}
return newList;
}
答案 3 :(得分:0)
i会将具有奇数或偶数元素的数组的情况组合如下:
public static int[] collapse(int[] a1) {
int[] res = new int[a1.length/2 + a1.length % 2];
for (int i = 0; i < a1.length; i++)
res[i/2] += a1[i];
return res;
}
答案 4 :(得分:-1)
public static int[] collapse(int[] a1) {
int newArrayLength = a1.length / 2;
int[] collapsed;
if(a1.length%2 == 0)
{
collapsed = new int[newArrayLength];
}
else
{
collapsed = new int[newArrayLength+1];
collapsed[newArrayLength] = a1[a1.length-1];
}
int firstTwoSums = 0;
for (int i = 0; i < newArrayLength; i++) {
firstTwoSums = a1[i*2] + a1[i*2+1];
collapsed[i] = firstTwoSums;
}
return collapsed;
}
我修改了你的代码,你可以先试试。