简单的java方法导致错误的结果

时间:2015-06-14 11:50:39

标签: java arrays loops

我试图编写一个程序,询问整数数组的大小,数组的值,然后找出正整数的平均值并打印出来。当我运行它时,我有时会得到错误的结果。我还没有确定错误的结果取决于什么,但是例如,如果我输入以下输入:"数组大小:4,数组值:1,2,-5,5和#34;我平均得到" 2.0"

这是我的代码:

import java.util.Scanner;
public class Mitra {

private static Scanner user_input;

double avg (int[] arr, int size)
{
    int sum = 0;
    int numbers = 0;
    for (int i=0; i<size;i++)
    {
        if (arr[i]>0)
        {
            sum = sum+arr[i];
            numbers++;
        }
        else{
            continue;
        }
    }
    double average = sum/numbers;
    return average;
}


public static void main(String[] args) {
    user_input = new Scanner (System.in);
    System.out.println("enter array length");
    int alength = user_input.nextInt();
    int[] array_1 = new int[alength];
    for (int i=0; i<alength;i++)
    {
        System.out.println("Enter array value "+i);
        array_1[i] = user_input.nextInt();
    }
    Mitra obj = new Mitra();
    double result = obj.avg(array_1, alength);
    System.out.println("The average of the positive numbers of the array is "+result);
}

}

2 个答案:

答案 0 :(得分:2)

更改

double average = sum/numbers;

double average = (double)sum/numbers;

强制浮点除法。

否则,int division(在划分int类型的两个变量时发生的操作)将在划分8/3时给出2(如在示例中那样)。

答案 1 :(得分:0)

当你评估sum/numbers时,它将结果存储在一个临时变量中(并且小数部分已被截断),然后在左侧分配它。你需要使用(Double)这样对它进行类型化:< / p>

double average = (double)sum/numbers;