获得与数组中的数字最接近的值

我有一系列正/负的整数

int[] numbers = new int[10]; numbers[0] = 100; numbers[1] = -34200; numbers[2] = 3040; numbers[3] = 400433; numbers[4] = 500; numbers[5] = -100; numbers[6] = -200; numbers[7] = 532; numbers[8] = 6584; numbers[9] = -945; 

现在,我想针对这个数组测试另一个int,并返回最接近int的数字。

例如,如果我使用数字490我会从数字500返回第4项,这样做的最佳方法是什么?

 int myNumber = 490; int distance = 0; int idx = 0; for(int c = 0; c < numbers.length; c++){ int cdistance = numbers[c] - myNumber; if(cdistance < distance){ idx = c; distance = cdistance; } } int theNumber = numbers[idx]; 

这不起作用。 有关一个好方法的任何建议吗?

 int myNumber = 490; int distance = Math.abs(numbers[0] - myNumber); int idx = 0; for(int c = 1; c < numbers.length; c++){ int cdistance = Math.abs(numbers[c] - myNumber); if(cdistance < distance){ idx = c; distance = cdistance; } } int theNumber = numbers[idx]; 

始终使用您正在考虑的第一个元素初始化最小/最大函数。 使用Integer.MAX_VALUEInteger.MIN_VALUE类的东西是获得答案的天真方式; 如果稍后更改数据类型( MAX_LONGMAX_LONGMAX_INT非常不同!)或者将来想要为任何数据类型编写通用的min/max方法,它都不会很好。

你很亲密 我认为’distance’的初始值应该是一个大数而不是0.并使用cdistance的绝对值。

Java 8中

 List list = Arrays.stream(numbers).boxed().collect(Collectors.toList()); int n = 490; int c = list.stream() .min(Comparator.comparingInt(i -> Math.abs(i - n))) .orElseThrow(() -> new NoSuchElementException("No value present")); 

最初,您可以使用List而不是Array (列表具有更多function)。

cdistance = numbers[c] - myNumber 。 你没有采取差异的绝对值。 如果myNumbernumbers[c]大得多,或者numbers[c]为负数,则比较将记录为“最小差异”。

例如, numbers[c] = -34200numbers[c] - myNumber将是-34690,远远小于distance

此外,您应该将distance初始化为较大的值,因为在开始时未找到任何解决方案。

一个语句块初始化并设置最接近的匹配。 此外,如果未找到最接近的匹配,则返回-1(空数组)。

  protected int getClosestIndex(final int[] values, int value) { class Closest { Integer dif; int index = -1; }; Closest closest = new Closest(); for (int i = 0; i < values.length; ++i) { final int dif = Math.abs(value - values[i]); if (closest.dif == null || dif < closest.dif) { closest.index = i; closest.dif = dif; } } return closest.index; } 

我这样做是为了我的课程作业,我在Ready to Program Java中进行了编程,很抱歉,如果它有点令人困惑。

 // The "Ass_1_B_3" class. import java.awt.*; import hsa.Console; public class Ass_1_B_3 { static Console c; // The output console public static void main (String[] args) { c = new Console (); int [] data = {3, 1, 5, 7, 4, 12, -3, 8, -2}; int nearZero = 0; int temp = 0; int temp2 = data[0]; for (int i = 0; i < data.length; i++) { temp = Math.abs (data[i]); nearZero = temp2; if (temp < temp2) { temp2 = temp; nearZero = data[i]; } } c.println ("The number closest to zero is: " + nearZero); // Place your program here. 'c' is the output console } // main method } // Ass_1_B_3 class 
 public int getClosestToTarget(int target, int[] values) { if (values.length < 1) throw new IllegalArgumentException("The values should be at least one element"); if (values.length == 1) { return values[0]; } int closestValue = values[0]; int leastDistance = Math.abs(values[0] - target); for (int i = 0; i < values.length; i++) { int currentDistance = Math.abs(values[i] - target); if (currentDistance < leastDistance) { closestValue = values[i]; leastDistance = currentDistance; } } return closestValue; } 
 public int nearnum(int myNumber,int[] numbers) { int distance = Math.abs(numbers[0] - myNumber); int idx = 0; for(int c = 1; c < numbers.length; c++){ int cdistance = Math.abs(numbers[c] - myNumber); if(cdistance < distance){ idx = c; distance = cdistance; } } return numbers[idx]; } 
 public class Main { public static void main(String[] args) { int[] numbers = {6,5,10,1,3,4,2,14,11,12}; for(int i =0; i 

这是我做的事……

 import javax.swing.JOptionPane; public class NearestNumber { public static void main(String[] arg) { int[] array={100,-3420,3040,400433,500,-100,-200,532,6584,-945}; String myNumberString =JOptionPane.showInputDialog(null,"Enter the number to test:"); int myNumber = Integer.parseInt(myNumberString); int nearestNumber = findNearestNumber(array,myNumber); JOptionPane.showMessageDialog(null,"The nearest number is "+nearestNumber); } public static int findNearestNumber(int[] array,int myNumber) { int min=0,max=0,nearestNumber; for(int i=0;imin) { min=array[i]; } } else if(array[i]>myNumber) { if(max==0) { max=array[i]; } else if(array[i] 

}