How to find the Odd and Even numbers in an Array?

2019-09-16 11:14发布

Right now, I'm trying to find the odd and even numbers of an array. Here's the code of what I have so far. I know my findEvens() and findOdds() methods are messed up because they keep giving me off values whenever I try to print the final result. For example, if I try to find the odds of {1,5,8,3,10}, it gives me {5,3,0}. And if I try to find the evens of {2,5,8,7,19}, it gives me {2,8,0}. Anyone know why?

public class Scores {
   private int[] numbers;
   public Scores(int[] numbersIn) {
      numbers = numbersIn;
   }
   public int[] findEvens() {
      int numberEvens = 0;
      for (int i = 0; i < numbers.length; i++) {
         if (i % 2 == 0) {
            numberEvens++;
         }
      }
  int[] evens = new int[numberEvens];
  int count = 0;
  for (int i = 0; i < numbers.length; i++) {
     if (numbers[i] % 2 == 0) {
        evens[count] = numbers[i];
        count++;
     }      
  }      
  return evens;
}
public int[] findOdds() {
  int numberOdds = 0;
  for (int i = 0; i < numbers.length; i++) {
     if (i % 2 == 0) {
        numberOdds++;
     }
  }
  int[] odds = new int[numberOdds];
  int count = 0;
  for (int i = 1; i < numbers.length; i++) {
     if (numbers[i] % 2 == 1) {
        odds[count] = numbers[i];
        count++;
     }      
  }      
  return odds;
 }
 public double calculateAverage() {
      int sum = 0;
      for (int i = 0; i < numbers.length; i++) {
         sum += numbers[i];
      }   
      return (double) sum / numbers.length;
   }
 public String toString() {
    String result = "";
    for (int i = 0; i < numbers.length; i++) {
       result += numbers[i] + "\t";
    }
    return result;
 }
public String toStringInReverse() {
  String result = "";
  for (int i = numbers.length - 1; i >= 0; i--) {
     result += numbers[i] + "\t";
  }
  return result;
  }
}                  

5条回答
我欲成王,谁敢阻挡
2楼-- · 2019-09-16 11:18

'i' is used as conditional variable for looping. You should not divide this by 2. You have to divide the array element. like

      if (numbers[i] % 2 == 0) {
        numberEvens++;
     }

then it should work. Thanks

查看更多
一纸荒年 Trace。
3楼-- · 2019-09-16 11:27

Try This Code

import java.util.Scanner;
public class OddEven {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("enter number Elements in Array");
        int n = s.nextInt();
        int arr[] = new int[n];
        System.out.println("enter Elements ");
        for(int i=0; i<n; i++) {
            arr[i]=s.nextInt();
        }
        int [] odd = filterOdd(arr);
        try {
            for(int i=0; i<n; i++) {
                System.out.println("Odd" + odd[i]);
            }
        } catch(ArrayIndexOutOfBoundsException e) {}
        int [] even = filterEven(arr);
        try {
            for(int i=0; i<n; i++) {
                System.out.println("Even" + even[i]);
            }
        } catch(ArrayIndexOutOfBoundsException e) {}
    }
    public static int[] filterOdd(int[] a) {
        int l = 0;
        int j = 0;
        for(int i=0; i<a.length; i++) {
            if(a[i]%2==1) {
                l++;
            }
        }
        int k[]=new int[l];
        for(int i=0; i<a.length; i++) {
            if(a[i]%2==1) {
                k[j] = a[i];
                j++;
            }
        }
        return k;
    }
    public static int[] filterEven(int[] a) {
        int l = 0;
        int j = 0;
        for(int i=0; i<a.length; i++) {
            if(a[i]%2==0) {
                l++;
            }
        }
        int k[] = new int[l];
        for(int i=0; i<a.length; i++) {
            if(a[i]%2==0) {
                k[j] = a[i];
                j++;
            }
        }
        return k;
    }
}
查看更多
欢心
4楼-- · 2019-09-16 11:27
public class Array {


    public static void main(String[] args) {
        // TODO code application logic here
        //Array declaration and value asign
        int number[]=new int[]{1,2,3,4,5,6,7,8,9};
        // for loop to move number
        for(int p=0;p<number.length;p++)
        {
            // check number is even or odd??
            if(number[p]%2==0)

                System.out.println(number[p]+ " is Even number");
            else
                System.out.println( number[p]+" is odd umber");




        }

                }


}
查看更多
Anthone
5楼-- · 2019-09-16 11:40

Odd array one columns and another columns even array

public class OddEven {

     public static void main(String[] args) {

        int arr[]={1,2,3,4,5,6,7,8};
        int ss[]=new int[10];
        int odd[]=new int[10];
        int i;
        int k;

        for( i=0;i<arr.length;i++)
        {
            if(arr[i]%2==0)
            {
               ss[i]=arr[i];
               System.out.print(""+ss[i]);
               System.out.print(" ");
            }

            if((arr[i]%2)!=0)
            {
                 odd[i]=arr[i];

                 System.out.print(""+odd[i]);
                 System.out.print(" ");
            }else
            {
                 System.out.println(" ");
            }
        }
    }
}

========================================output============================== 1 2
3 4
5 6
7 8

查看更多
Anthone
6楼-- · 2019-09-16 11:45

You're problem is in counting how many even numbers you have

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

this will always return a number that is half the size of the length of numbers because you're doing mod division on the number of elements in the array, not on the elements themselves. Add numbers[i] to the if statement

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

looks like you've got the same problem with odd count

查看更多
登录 后发表回答