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