好的,所以我有这个问题,当给定一个数组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。帮助表示感谢,谢谢:)
答案 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;
}
答案 1 :(得分:0)
你可以有一个预计算循环,只需增加一个计数器然后分配赔率:
int counter = 0;
for (int i = 0; i < arr.length; i++)
{
if (arr[i] % 2 != 0)
{
counter ++;
}
}
odds = new int[counter];
答案 2 :(得分:0)
var result = input.Select(a=>a % 2 != 0 ? a : 0).ToArray()
您可以轻松使用linq
,基本上您使用原始数组,然后使用Select
选择数组的值本身,如果它是偶数,则选择0,然后转换使用array
方法ToArray
。
答案 3 :(得分:0)
我会使用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;
}