Java 查找数组中元素的平均值并将平均值与数组中最近的数字元素进行比较

Java 查找数组中元素的平均值并将平均值与数组中最近的数字元素进行比较,java,arrays,Java,Arrays,在比较2d数组的平均元素与最接近平均值的元素值时遇到一些问题。主要的问题是,我不知道除了使用math.abs将数组元素与平均值进行比较外,如何继续 我的密码 public class exercise_2{ public static int[] closestToMean (double[][] array) { int sum = 0; for (int i=0; i < array.length; i++) { for (int j=0; j <

在比较2d数组的平均元素与最接近平均值的元素值时遇到一些问题。主要的问题是,我不知道除了使用math.abs将数组元素与平均值进行比较外,如何继续

我的密码

public class exercise_2{
public static int[] closestToMean (double[][] array)
{
    int sum = 0;
    for (int i=0; i < array.length; i++)
{
        for (int j=0; j < array.length; j++)
    {
        sum += array[i][j];
    }
}
    double mean = (double) sum / array.length;
    System.out.println("Mean = " + mean);
    //calculate mean of array elements i + j


    //closest to mean
    int distance = Math.abs(array[0] - mean);
    int i = 0;
    for (int c = 1; c < array.length; c++)
    {
        int cdistance = Math.abs(array[c] - mean);
        if (cdistance < distance)
        {
            i = c;
            distance = cdistance;
        }
    }
    double mean = array[i];
    System.out.println("Closest array element = " + mean);
    //print closest to mean array element
}

public static void testClosestToMean()
{
    exercise_2 ex2 = null;
    ex2.closestToMean();
    //invoke method closestToMean()
}

public static void main()
{
    exercise_2 ex2 = null;
    ex2.testClosestToMean();
    //invoke testClosestToMean()
}
公共课练习2{
public static int[]closestToMean(双[][]数组)
{
整数和=0;
for(int i=0;i

}

以下代码应该执行您想要的操作:

@Test
public void test() {
  double[][] numbers = new double[][] {new double[] {1, 3, 5, 8}, new double[] {1, 2}};
  int[] indices = getClosestToMeanIndices(numbers);
  System.out.println("Closest element indices: " + indices[0] + ", " + indices[1]);
  System.out.println("Closest element: " + numbers[indices[0]][indices[1]]);
}

private int[] getClosestToMeanIndices(double[][] numbers) {
  if (numbers.length == 0) {
    throw new IllegalArgumentException("Input is empty");
  }

  // Calculate the mean
  double sum = 0;
  double elementCount = 0;
  for (double[] number : numbers) {
    for (double n : number) {
      sum += n;
      elementCount++;
    }
  }
  double mean = sum / elementCount;

  // Find closest index
  int[] indices = new int[] {-1, -1};

  double distance = Math.abs(mean - numbers[0][0]);
  for (int i = 0; i < numbers.length; i++) {
    for (int j = 0; j < numbers[i].length; j++) {
      double currentDistance = Math.abs(mean - numbers[i][j]);
      if (currentDistance < distance) {
        distance = currentDistance;
        indices[0] = i;
        indices[1] = j;
      }
    }
  }

  return indices;
}
@测试
公开无效测试(){
double[][]数字=新的double[][{新的double[]{1,3,5,8},新的double[]{1,2};
int[]索引=GetClosestToManidics(数字);
System.out.println(“最近元素索引:“+索引[0]+”,“+索引[1]);
System.out.println(“最近的元素:+数字[索引[0]]][索引[1]]);
}
私有int[]GetClosestToManidics(双[][]个数字){
如果(number.length==0){
抛出新的IllegalArgumentException(“输入为空”);
}
//计算平均数
双和=0;
双元素计数=0;
for(双[]数字:数字){
用于(双n:数字){
总和+=n;
elementCount++;
}
}
双平均值=总和/元素计数;
//查找最近的索引
int[]索引=新的int[]{-1,-1};
双距离=数学abs(平均数[0][0]);
for(int i=0;i

输出:

最近元素指数:0,1
最近元素:3.0


您在代码中忘记的是,对于平均值,您不仅需要使用数组的长度,还需要使用2D数组中的完整元素数


最后,您可以检查距离并返回相应的索引。

您的意思是,Math.abs生成错误的结果?或者有一个条件是不使用数学库编写程序?最好将
sum
定义为
double
,而不是
int
,因为数组本身是
double[][
。但是你对最近元素的测试似乎很好。您只需定义两次
mean
,这将导致编译错误。(数组[0]-mean);说我不能使用二进制运算符,因为它是一个糟糕的运算符。我可以使用math.abs,但不知道要传递什么运算符才能让它工作。请记住,数组是二维的。还要将距离设置为两倍,否则非整数测试数据可能会给出错误的结果