2014-12-07 115 views
0

好一个数组,所以我有这样的问题,即给定一个数组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“ - 一个int数组中的空格? – 2014-12-07 02:42:02

+0

@Alex为了公平起见,我不确定我是否知道如何做到这一点,无论是! ;) – 2014-12-10 18:15:47

回答

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; 
} 
+0

我该如何设置数组的大小? – 2014-12-07 02:40:38

+0

你可以在这种情况下使用数组列表。 – 2014-12-07 02:42:57

0

你可以有一个预计算的循环,你只是增加一个计数器,然后分配赔率:

int counter = 0; 
for (int i = 0; i < arr.length; i++) 
{ 
    if (arr[i] % 2 != 0) 
    { 
     counter ++; 
    } 
} 
odds = new int[counter]; 
0
var result = input.Select(a=>a % 2 != 0 ? a : 0).ToArray() 

您可以使用linq容易,基本上你使用原来的数组,然后使用Select来选择数组本身的值,如果它是偶数,则选择0,然后使用ToArray方法将其转换为array

+0

也许一些解释对于OP来说会很好。 – Rizier123 2014-12-07 03:04:54

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