返回只包含奇数
好一个数组,所以我有这样的问题,即给定一个数组ARR时,返回只包含从ARR原来的顺序奇数数组。返回只包含奇数
我的代码:
public int [] youMakeMeOdd(int [] arr)
{
int[] odds;
odds = new int[arr.length];
for(int i = 0; i < arr.length; i++)
{
if(arr[i] % 2 != 0)
{
odds[i] = arr[i];
}
}
return odds;
}
少数测试者:
预计............................ ...............................执行命令
youMakeMeOdd({1,2,3})→{1 ,3} {..................... 1,0,3}
youMakeMeOdd({2,1,3,5,7})→ {1,3,5,7} ....... {0,1,3,5,7}
youMakeMeOdd({2,4,6,8})→{} ........................ {0,0,0,0}
。
我似乎无法弄清楚如何把一个空格,而不是有0的。帮助理解,由于:)
输出阵列被初始化为输入数组的大小。我猜这是java代码,数组元素默认初始化为零。因此,只要if条件跳过第i个位置,就会显示默认值(零)。
public int[] youMakeMeOdd(int [] arr) {
List<Integer> odds = new ArrayList<Integer>();
for(int i = 0; i < arr.length; i++)
{
if(arr[i] % 2 != 0)
{
odds.add(arr[i]);
}
}
return convertIntegers(odds);
}
public static int[] convertIntegers(List<Integer> integers)
{
int[] ret = new int[integers.size()];
Iterator<Integer> iterator = integers.iterator();
for (int i = 0; i < ret.length; i++)
{
ret[i] = iterator.next().intValue();
}
return ret;
}
我该如何设置数组的大小? – 2014-12-07 02:40:38
你可以在这种情况下使用数组列表。 – 2014-12-07 02:42:57
你可以有一个预计算的循环,你只是增加一个计数器,然后分配赔率:
int counter = 0;
for (int i = 0; i < arr.length; i++)
{
if (arr[i] % 2 != 0)
{
counter ++;
}
}
odds = new int[counter];
var result = input.Select(a=>a % 2 != 0 ? a : 0).ToArray()
您可以使用linq
容易,基本上你使用原来的数组,然后使用Select
来选择数组本身的值,如果它是偶数,则选择0,然后使用ToArray
方法将其转换为array
。
也许一些解释对于OP来说会很好。 – Rizier123 2014-12-07 03:04:54
我会用一个ArrayList。你的问题似乎是数组是不可变的,所以你会自动用一堆不需要的0来填充你的数组。 ArrayLists可以更改维度,因此您不必拥有0。
你可以看看他们在这里:http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
确保导入的util包。
import java.util.*;
public ArrayList<Integer> youMakeMeOdd(int [] arr)
{
您需要指定要在角度大括号中保持的类型。因为int是一种原始的,你需要使用Integer类
ArrayList<Integer> odds;
odds = new ArrayList<>();
for(int i = 0; i < arr.length; i++)
{
if(arr[i] % 2 != 0)
{
add方法添加到年底
odds.add(new Integer(arr[i]));
}
}
return odds;
}
整数“我似乎无法弄清楚如何把一个空白而不是0“ - 一个int数组中的空格? – 2014-12-07 02:42:02
@Alex为了公平起见,我不确定我是否知道如何做到这一点,无论是! ;) – 2014-12-10 18:15:47