我创建了一个方法,它将获取前一个数组的前两个值并将它们加在一起并重复此操作,直到创建了一个包含添加值的新数组。但是,我想添加一条规则,如果前一个数组的最后一个数字是奇数,我不希望添加该数字。我能够在某种程度上做到这一点,但不幸的是,代价是删除索引的倒数第二个值。例如,我的 {1, 4, 6, 8, 3, 4, 6, 7, 10, 1} 数组正在打印 [5,14,7,13,1],而我得到了最后一个数字,但我仍然希望 10存在,但我对如何在不删除 10 的情况下让代码工作感到困惑。
import java.util.*;
import java.io.*;
public class reduceNumbers{
public static int[] reduce(int[] numArray){
int[] returnedArray = new int[(numArray.length) / 2];
if(returnedArray[returnedArray.length - 1] % 2 == 1){
for(int i = 0; i < returnedArray.length; i++) {
returnedArray[i] = numArray[2 * i] + numArray[2 * i + 1];
}
}
else{
for(int i = 0; i < returnedArray.length - 1; i++) {
returnedArray[i] = numArray[2 * i] + numArray[2 * i + 1];
}
returnedArray[returnedArray.length - 1] = numArray[numArray.length - 1];
}
return returnedArray;
}
public static void main(String[] args){
int[] firstArray = {1, 4, 6, 8, 3, 4, 6, 7, 10, 1};
int[] firstArrayA,
firstArrayA= reduce(firstArray);
System.out.println(Arrays.toString(firstArrayA) );
}
}
最佳答案
这是你想要的吗?
import java.util.*;
import java.io.*;
public class reduceNumbers{
public static int[] reduce(int[] numArray){
boolean even = numArray.length % 2 == 0;
if(even) {
int[] returnedArray = new int[numArray.length / 2];
for(int i=0;i<returnedArray.length;i++) {
returnedArray[i] = numArray[i * 2] + numArray[i * 2 + 1];
}
return returnedArray;
}
else{
int[] returnedArray = new int[(numArray.length + 1) / 2];
for(int i = 0; i < returnedArray.length - 1; i++) {
returnedArray[i] = numArray[i * 2] + numArray[i * 2 + 1];
}
returnedArray[returnedArray.length - 1] = numArray[numArray.length - 1];
return returnedArray;
}
}
public static void main(String[] args){
int[] firstArray = {1, 4, 6, 8, 3, 4, 6, 7, 10, 1};
int[] firstArrayA = reduce(firstArray);
System.out.println(Arrays.toString(firstArrayA) );
}
}
我重构了您的代码,只为每种情况分配 returnedArray,而不是在检查奇偶校验之前分配它。
关于java - 如何防止程序删除方法中的最后一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62164468/