返回一个只包含奇数整数的数组

时间:2014-12-07 02:36:56

标签: java arrays arraylist

好的,所以我有这个问题,当给定一个数组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。帮助表示感谢,谢谢:)

4 个答案:

答案 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;
}