在java中,如何找到给定数字与一组其他数字最接近的值?

在java中,如何找到给定数字与一组其他数字最接近的值?,java,average,Java,Average,我必须做这个节目: 要求用户提供5个介于0-15之间的数字。 找出这5个给定数字的平均值。 从给定的5个数字中找出最接近平均数的数字。 我知道如何询问用户“查找平均值”,但我不知道如何查找最接近的数字。语言:仅限Java。如果您有一个数字所在的数组,则必须对其进行排序以查找最接近您的值的数字 考虑一下这样的情况: //查找给定目标的元素壁橱的Java程序。 导入java.util.*; 导入java.lang.*; 导入java.io.*; 类FindClosestNumber{ //返回arr

我必须做这个节目: 要求用户提供5个介于0-15之间的数字。 找出这5个给定数字的平均值。 从给定的5个数字中找出最接近平均数的数字。
我知道如何询问用户“查找平均值”,但我不知道如何查找最接近的数字。语言:仅限Java。

如果您有一个数字所在的数组,则必须对其进行排序以查找最接近您的值的数字

考虑一下这样的情况:

//查找给定目标的元素壁橱的Java程序。
导入java.util.*;
导入java.lang.*;
导入java.io.*;
类FindClosestNumber{
//返回arr[]中最接近目标的元素
公共静态int findClosest(int arr[],int target)
{ 
int n=阵列长度;
//角落案例
如果(目标=arr[n-1])
返回arr[n-1];
//进行二进制搜索
int i=0,j=n,mid=0;
而(i0&&target>arr[mid-1])
返回getClosest(arr[mid-1],
arr[mid],目标);
/*重复左半部分*/
j=中等;
} 
//如果目标值大于中间值
否则{
中频(中频=val2-target)
返回值2;
其他的
返回值1;
} 
//驱动程序代码
公共静态void main(字符串[]args)
{ 
int arr[]={1,2,4,5,6,6,8,9};
int目标=11;
System.out.println(findClosest(arr,target));
} 
} 
因为您没有指定,所以我假设您有一个包含数字的数组。
当使用列表时,您可以使用一些函数来完成这项工作,这稍微容易一些。

很高兴听到您已经解决了大部分问题。现在是有趣的部分。看起来您是从java开始的,所以我不会为您编写代码(为了您:),我只能帮助您理解将要实现的底层逻辑

所以你有了
平均值
和5个数字。你怎么知道2号和另一个3号的距离有多近?这就像测量距离,你会发现差异。简单,对吗

所以你要做的是取平均值,然后从平均值中减去5个数字。现在结果可能是负数,因为有些数字可能大于平均值

例如,如果12是平均值,您有11和15,您可以看到
12-11=1
12-15=-3
。所以后一个结果更小,但11实际上更接近

因此,获取最低值并不是解决方案。你要得到的是震级。你可以做两件简单的工作

  • 您可以编写一个
    if
    条件来检查它是否为负值。如果是负数,则乘以-1,使之为正数
  • 您可以使用内置的数学函数,
    java.lang.math.abs(yourValue)
    它将返回
    yourValue
    的绝对值
  • 现在你拥有的每一个价值都是正的。您有
    average
    和一个数字。找出差异并保存它。你转到下一个号码。您也可以这样做,并与以前保存的号码进行比较,如果少于以前保存的号码,则将其保存到新号码

    现在,你怎么知道哪一个数字的差值最小(你当然知道,但如何让机器知道这一点)?您可以将其保存在一个2索引数组中,您可以根据自己的意愿将其保存在另一个变量中


    我想你已经找到答案了。

    如果你已经有了一个数字列表(或数组),为什么不循环一下,然后计算每个数字与平均数之间的差值——然后你就有了一个变量,跟踪哪个数字最接近平均数。如果你检查一个数字,发现它比你目前找到的最接近的数字更接近平均值,请更新变量。如果你知道如何正确计算平均值,那么找出最接近的数字应该不会太难。for循环将是一个很好的开端。对于这个简单的任务来说,这个解决方案非常复杂。我们正在讨论数组中的5个数字。我想你是对的。它们也不包括负值。我的错。我只是想举个例子来说明我所说的。
    // Java program to find element closet to given target.
    import java.util.*; 
    import java.lang.*; 
    import java.io.*; 
    
    class FindClosestNumber { 
      
    // Returns element closest to target in arr[] 
    public static int findClosest(int arr[], int target) 
    { 
        int n = arr.length; 
    
        // Corner cases 
        if (target <= arr[0]) 
            return arr[0]; 
        if (target >= arr[n - 1]) 
            return arr[n - 1]; 
    
        // Doing binary search  
        int i = 0, j = n, mid = 0; 
        while (i < j) { 
            mid = (i + j) / 2; 
    
            if (arr[mid] == target) 
                return arr[mid]; 
    
            /* If target is less than array element, 
               then search in left */
            if (target < arr[mid]) { 
         
                // If target is greater than previous 
                // to mid, return closest of two 
                if (mid > 0 && target > arr[mid - 1])  
                    return getClosest(arr[mid - 1],  
                                  arr[mid], target); 
                  
                /* Repeat for left half */
                j = mid;               
            } 
    
            // If target is greater than mid 
            else { 
                if (mid < n-1 && target < arr[mid + 1])  
                    return getClosest(arr[mid],  
                          arr[mid + 1], target);                 
                i = mid + 1; // update i 
            } 
        } 
    
        // Only single element left after search 
        return arr[mid]; 
    } 
    
    // Method to compare which one is the more close 
    // We find the closest by taking the difference 
    //  between the target and both values. It assumes 
    // that val2 is greater than val1 and target lies 
    // between these two. 
    public static int getClosest(int val1, int val2,  
                                         int target) 
    { 
        if (target - val1 >= val2 - target)  
            return val2;         
        else 
            return val1;         
    } 
    
    // Driver code 
    public static void main(String[] args) 
    { 
        int arr[] = { 1, 2, 4, 5, 6, 6, 8, 9 }; 
        int target = 11; 
        System.out.println(findClosest(arr, target)); 
    } 
    }