获取数组中特定数字内的平均值

时间:2019-08-16 12:44:15

标签: java

我有一个<TableCell> <Select> <MenuItem value={10}>Ten</MenuItem> <MenuItem value={20}>Twenty</MenuItem> <MenuItem value={30}>Thirty</MenuItem> </Select> </TableCell> 的列表。给定一个数字,代码将计算该数字邻居的平均值。例如,我们从位置7的9开始,然后在values[] = 3 4 6 3 4 5 10 7 4 5 3 10 4 9中显示满足条件i的位置values。然后计算该数字周围五个数字的平均值,即数字本身,前两个数字和后两个数字。

value[i] > 9

我希望得到代码的帮助,因为我想将这些代码应用于大数据。预先感谢

//The average of the 7th and 12th values is computed
average(7th)= (4 + 5 + 10 + 7 + 4 )/5 = 6
average(12th)= (5 + 3+ 10 + 4 + 9)/5 = 6.5
if  (values > 9)
    show index
else 
    changes (if false it shows the position)

我期望7和12的输出,但我什么也没得到,因为我无法计算上述条件的平均值。该问题的Matlab代码如下:

//the constructive computation structure     
public class calch {
    public static void main(String[] args) {    
        int [] values = {3,4,6,3,4,5,10,7,4,5,3,10,4,9};
        for (int i =0; i < values.length; i ++){
            double average = 0; 

            //How do I compute the average here: calculate the average of the five numbers around that number , that is, the number itself, 2 previous number and the 2 following numbers
            if ( (values[i] > 9) && (average > 9) ) {
                 System.out.println("True changes  " + values[i]);
            } else if ((values[i] > 9) && (average < 9)){
                System.out.println (" False Changes " + values[i]);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您只需要访问周围的5个数字,例如values[i-2]+...+values[i+2]。此外,在使用编码逻辑时,请注意输入数据格式不正确的情况。例如:

  

在这种情况下,如果您的数组是{12,4,5,9,7,8,13},您将得到IndexOutOfBoundException

我在下面的代码中处理了这种情况:

public class calch 
{
    public static void main(String[] args) 
    {  
        int [] values = {3,4,6,3,4,5,10,7,4,5,3,10,4,9};
        for (int i =0; i < values.length; i ++)
        {
            // you can just use one "if" for checking "values[i]>9"
            // Added some checks so thta you wont get "IndexOutOfBoundsException"
            if((values[i] > 9) && (i>1) && (i<values.length-2))
            {
                double average = (double)(values[i-2]+values[i-1]+values[i]+values[i+1]+values[i+2])/5; 

                //System.out.println(average);  for debugging
                if (average > 9)
                    System.out.println("True changes  " + values[i]);
                else if (average < 9)
                    System.out.println("False Changes " + values[i]);
            }
            else
            {
                // ... I do't know what to do if data is not in correct form
                // that is if you last element of array is >9
            }
        }
    }
} 

答案 1 :(得分:0)

您可以通过以下方式计算平均值:

if (values[i] > 9) {
    int sum = values[i];
    double d = 1.0;
    if ((i - 1) > 0) {
        sum += values[i - 1];
        d += 1.0;
    }
    if ((i - 2) > 0) {
        sum += values[i - 2];
        d += 1.0;
    }
    if ((i + 1) < values.length) {
        sum += values[i + 1];
        d += 1.0;
    }
    if ((i + 2) < values.length) {
        sum += values[i + 2];
        d += 1.0;
    }

    double avg = sum / d;
}