如何计算数组中偶数和奇数的平均值?

时间:2015-05-24 01:38:10

标签: java

作为课堂练习,我必须使用以下程序编写代码:

1)计算数组中偶数和奇数的平均值。

我希望使用一种方法来查找偶数和奇数的平均值。但是,我在返回正确的平均值方面遇到了麻烦。例如,如果我只输入奇数,我会收到错误,反之亦然。

此错误: “java.lang.ArithmeticException:/ zero”

另外,如果有可能的话,我希望得到一些帮助来编写剩余的练习,其中包括:

2)打印数组中的最高和最低数字 3)允许用户修改数组的任何数字

到目前为止,我有这段代码:

public static void main (String args[]){

    int x[] = new int[4];
    Scanner input = new Scanner(System.in);

    for(int i = 0; i < x.length ; i++){
        System.out.println("Enter a number: ");
        x[i] = input.nextInt();
    }


    System.out.println("Average of even numbers: " + getAverage(x));
    System.out.println("Average of odd numbers: " + getAverage(x));

 }

public static int getAverage(int a[]){
    int add_even = 0;
    int counter_even = 0;
    int average_even = 0;

    int add_odd = 0;
    int counter_odd = 0;
    int average_odd = 0;


    for(int i = 0; i < a.length; i++){
        if(a[i] % 2 == 0){
            add_even += a[i];
            counter_even++;
        }
        else if(a[i] % 2 == 1) {
            add_odd += a[i];
            counter_odd++;
        }

    }

    if (add_even % 2 == 1 && add_odd % 2 == 1){
    average_even = 0;
    average_odd = add_odd / counter_odd;

    return average_even;
   }
   else if (add_even % 2 == 0 && add_odd % 2 == 0){
    average_even = add_even / counter_even;
    average_odd = 0;

    return average_even;
    }
   else{

    average_even = 0;
    average_odd = add_odd / counter_odd;

    return average_odd;

    }


} 

谢谢!

4 个答案:

答案 0 :(得分:0)

这里有一个除以零的错误。

else if (add_even % 2 == 0 && add_odd % 2 == 0){
    average_even = add_even / counter_even;
    average_odd = 0;
    return average_even;
}

0 % 2 == 0所以即使add_even为0(因此也是counter_even)你试图用它来划分。您需要通过检查counter_even是否为0来解释代码中的内容。

else if (counter_even != 0 && add_even % 2 == 0 && add_odd % 2 == 0){

答案 1 :(得分:0)

1)使用一种方法得到偶数和奇数的平均值是不合适的,因为你只有return一个int。使用两种方法会更简单但是如果你坚持使用一种方法,你可以添加boolean作为这样的参数来决定做什么。如果没有值,则仅处理ArithmeticException return 0

public static int average(int[] n, boolean even) {
     int total = 0;
     int count = 0;
     for (int i = 0; i < n.length; i++) {
          if (even == (n % 2 == 0)) {
               total += n;
               count ++;
          }
     }
     if (count == 0)
          return 0;
     return total / count;

2)要检查发现最大值和最小值,只需像这样循环遍历数组

int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;

for (int i = 0; i < x.length; i++) {
     if (x[i] < min)
          min = x[i];
     if (x[i] > max)
          max = x[i];
}

3)要允许用户修改数组,您可以打印这些值并提示他们想要更改的值。

System.out.print("Array: ");
for (int i = 0; i < x.length; i++) {
     System.out.print(i + ",");
}
System.out.println();
System.out.println("Which value would you like to change?");
int index = input.nextInt();
System.out.println("What do you want the new value to be?");
int value = input.nextInt();

然后,您可以运行一个更改数组值

的方法
edit(x, index, value);

public static int edit(int[] n, int index, int value) {
     n[index] = value;
     return n;
}

答案 2 :(得分:0)

你的平均值看起来比较复杂。

首先关闭getAverage(x)

System.out.println("Average of even numbers: " + getAverage(x));
    System.out.println("Average of odd numbers: " + getAverage(x));

将返回相同的值,因此如果您想获得赔率或均值的平均值,则该方法应该需要布尔值arg来表示奇数或偶数。

在你的方法中,你应该循环遍历所有数字并检查它是否是偶数。如果它是均匀的并且你是平均值,则将其添加到&#34;总计&#34;并将一个添加到计数器。最后划分&#34;总计&#34;由计数器返回值。平均值很可能包含十进制值,因此您应该返回double或float。

示例:

public static double getAverage(int a[], boolean even){
  double total = 0;//These are doubles so dividing later does not require casting to retain a decimal (this can be an int if you only want to return integers)
    double counter = 0;
  for(int i = 0; i<a.length; i++){
    if(a[i] % 2 == 0 && even){//even
      counter++;
      total += a[i];
    }else{//odd
      counter++;
      total += a[i];
    }
  }
  if(total == 0){//Avoid dividing by 0.
    return 0; //You can also throw an exception instead of returning 0.
  }
  return total / counter; //Returns the average for even or odd numbers.
}

对于问题的第二部分,您需要遍历数字并找到最高和最低的循环。

示例:

int highest = 0;
int lowest = 0;
for(int i = 0; i<x.length; i++){
  if(x[i] > highest){
    highest = x[i];
  }
  if(x[i] < lowest){
    lowest = x[i];
  }
  if(i == 0){
    highest = x[i];
    lowest = x[i];  
  }
}

答案 3 :(得分:0)

我使用 JS 执行此任务,您只需将我的代码重写为 Java 语言。

  

如果除以2的结果没有,则数字可被2整除   余数或分数分量 - 换句话说,如果结果为a   整数。零是偶数,因为0除以   结果商得出的结果也是0 - 一个整数(作为a   可以写成没有余数的整数,0分类为   整数)。

&#13;
&#13;
function compareEvenOddAverage(arr) {
let even = 0,
    odd = 0,
    evenCounter = 0,
    oddCounter = 0,
    str = '';

for (let i = 0; i < arr.length; i++) {
    if (arr[i] % 2 === 0) {
        even += arr[i];
        evenCounter++;
    } else {
        odd += arr[i];
        oddCounter++;
    }
}

if (even / evenCounter > odd / oddCounter) {
    str += 'Average value of even numbers is greater';
} else if (even / evenCounter < odd / oddCounter) {
    str += 'Average value of odd numbers is greater';
} else {
    str += 'Average values are equal';
}

return str;
}

console.log(compareEvenOddAverage([0, 1, 2, 3, 4, 5]));
&#13;
&#13;
&#13;