数组 - 赔率和均衡来确定数组中有多少值是奇数,有多少是偶数

时间:2014-12-04 21:38:34

标签: java arrays

我正试图找到练习阵列的平均值和几率。

示例数据:

2 4 6 8 10 12 14
1 2 3 4 5 6 7 8 9
2 10 20 21 23 24 40 55 60 61

示例输出:

Odds - []
Evens - [2, 4, 6, 8, 10, 12, 14]

Odds - [1, 3, 5, 7, 9]
Evens - [2, 4, 6, 8]

Odds - [21, 23, 55, 61]
Evens - [2, 10, 20, 24, 40, 60]

到目前为止,这是我的代码:

import java.util.Scanner;

public class OddsAndEvens
{
    private static int countEm(int[] array, boolean odd)
    {
        int count = 0;
        int dum = 0;
        for(int i=0; i< array.length; i++)
        {
            dum = array[i] / 2;
            if(dum == 0 )
            {
                count++;
            }
        }
        return count;
    }

    public static int[] getAllEvens(int[] array)
    {
        int numberEvens=0;
        for(int i =0; i<array.length; i++)
        {
            if(array[i]%2 ==0)
            {
                numberEvens++;
            }
        }

        int[] evens  = new int[array.length - countEm(array,false)];
        int count=0;
        for(int i=0; i<array.length; i++)
        {
            if(array[i]%2==0)
            {
                evens[count] = array[i];
                count++;
            }
        }
        return evens;
    }

    public static int[] getAllOdds(int[] array)
    {
        int numberEvens = 0;
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] % 2 == 0)
            {
                numberEvens++;
            }
        }
        return null;
    }
}

但是我的输出中出现了错误。这些错误是我在输出中得到零的事实。 我刚刚开始,我希望有人能帮助我。

4 个答案:

答案 0 :(得分:0)

您正在创建一个包含太多初始项的新数组 - 因此最后会为零。你的getAllEvens()方法看起来更像是:

public static int[] getAllEvens(int[] array)
{
    int numberEvens = 0;
    for (int i = 0; i < array.length; i++)
    {
        if (array[i] % 2 == 0)
        {
            numberEvens++;
        }

    }

    int[] evens = new int[numberEvens]; // This has changed
    int count = 0;
    for (int i = 0; i < array.length; i++)
    {
        if (array[i] % 2 == 0)
        {
            evens[count] = array[i];
            count++;
        }
    }
    return evens;
}

这将创建一个新数组,其中包含您要填充它的项目数。

编辑:要解决您的评论,这是我的main()方法和上述方法的输出。

public static void main(String[] args)
{
    int[] input =
    {
        2, 4, 6, 8, 10, 12, 14,
        1, 2, 3, 4, 5, 6, 7, 8, 9,
        2, 10, 20, 21, 23, 24, 40, 55, 60, 61

    };

    int[] evens = getAllEvens(input);

    System.out.println(Arrays.toString(evens));
}

哪个给出了

[2, 4, 6, 8, 10, 12, 14, 2, 4, 6, 8, 2, 10, 20, 24, 40, 60]

答案 1 :(得分:0)

我认为这是最好的方法:

import java.util.ArrayList;
import java.util.List;

public class EvensAndOdds {

public static List<Integer> getOdds(int[] numbers){
    List<Integer> odds = new ArrayList<>();

    for(int i = 0; i < numbers.length; i++){
        if((numbers[i]%2) != 0){
            odds.add(numbers[i]);
        }
    }
    return odds;
}

public static List<Integer> getEvens(int[] numbers){
    List<Integer> evens = new ArrayList<>();

    for(int i = 0; i < numbers.length; i++){
        if((numbers[i]%2) == 0){
            evens.add(numbers[i]);
        }
    }
    return evens;
}

public static void main(String[] args){
    int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

    List<Integer> evens = getEvens(numbers);
    List<Integer> odds = getOdds(numbers);

    System.out.println("Evens: ");
    for(Integer even: evens){
        System.out.print(even.toString() + " ");
    }

    System.out.println("");

    System.out.println("Odds: ");
    for(Integer odd: odds){
        System.out.print(odd.toString() + " ");
    }
}

}

答案 2 :(得分:0)

怎么样;):

public class EvenOddSorter {

    public void sort(int[] numbers) {
       Arrays.sort(numbers,new Comparator<int>() {
           @Override
           public int compare(int i, int y) {  
               if(i % 2 == 0) 
                  return -1;
               if(y % 2 == 0) 
                  return 1;
               return 0;
           }            
       });
    }

}

然后通过找到第一个奇数并使用

从数组中提取赔率和均值
int[] evens = Arrays.copyOfRange(numbers, 0, numberOfFirstOdd);
int[] odds =  Arrays.copyOfRange(numbers, numberOfFirstOdd, numbers.length) 

答案 3 :(得分:0)

您的主要问题来自您的countEm方法。这也是阵列后面所有额外零的原因。通过尽可能少的更改可以解决这些问题并使您的程序正常工作。

主要的粗心错误之一是您使用/代替%来检查countEm方法中的平均值和赔率。

  1. 您的countEm方法不完整
  2. 使用错误的运算符计算偶数/奇数
  3. 不完整的countEm方法现在只计算偶数的数量,无论布尔值是true还是false。我帮助您实施了完整的countEm

    private static int countEm(int[] array, boolean odd)
    {
        int numEven = 0;
        int numOdd = 0; 
        for(int i=0; i< array.length; i++)
            if(array[i] % 2 == 0 )   //You used / instead of % earlier!
                numEven++;
            else
                numOdd++; 
    
        if(odd)
            return numOdd;
        else
            return numEven; 
    }
    

    进行上述更改后,我确定它可以正常工作。当然,您还没有完成获取getAllOdds的方法。以上更改将使您的getAllEvens正常工作。


    或者,对我自己来说,我喜欢这样写。我更喜欢较短的代码:

    private static int countEm(int[] array, boolean odd)
    {
        int numEven = 0;
        for(int i=0; i< array.length; i++)
            if(array[i] % 2 == 0 )
                numEven++;             
        return odd?array.length-numEven:numEven;
    }
    

    我阻止使用像数组列表这样的数据结构,因为当我看到这些问题时,我知道你可以使用的唯一内容。