如何在最接近给定数字的数组中查找值

时间:2015-02-14 04:39:31

标签: java arrays

我非常努力地理解这个概念(数组),但我遇到了很多麻烦(这是我的第一个计算机科学课程。)这是我的代码,问题评论在顶部。我试图解决这个问题,但我认为我的逻辑是正确的,因为我没有得到理想的答案。

// Generate an array of 50 random numbers between 1 to 100. Now, find the number in the array closest to 75 and output it using println(). 

int[] numbers = new int[50];
int targetNumber = 75;

for (int i = 0; i < numbers.length; i++){
  numbers[i] = (int) random(1,100);

int closestSoFar = abs(numbers[i]-targetNumber);

  if(closestSoFar > targetNumber){
    closestSoFar = abs(numbers[i]-targetNumber);

    println(closestSoFar);
  }
}

虽然我非常感谢正确答案,但我很乐意听到为什么它是正确答案,以及如何继续我可以改进我的逻辑以便我可以做到在我自己的未来。

2 个答案:

答案 0 :(得分:2)

根据要求,我将解释我认为答案是什么,然后提供一些关于如何找到它的提示。

你的逻辑是:

int closestSoFar = abs(numbers[i] - targetNumber);
if (closestSoFar > targetNumber) {

现在想象这个数字是&#39; 76&#39;。 closestSoFar将成为abs(76 - 75) 1。这显然不会大于75

因此逻辑错误很简单:您将差异与绝对数字进行比较。

分辨率是您确实需要检查当前号码numbers[i]是否比closestSoFar更近。这可以通过以下方式完成:

if (abs(numbers[i] - targetNumber) < abs(closestSoFar - targetNumber)) {

现在,关于你如何自己找到它,这里有一些提示:

  1. 第一个,也是最简单的,是查看你的代码并在头脑中运行一个场景(在这种情况下是数字76)。检查结果是否符合预期。在这种情况下,你会发现它。
  2. 如果这不起作用(例如,逻辑太复杂,无法做到),那么请使用交互式调试器。逐步检查逻辑检查变量并再次检查它是否返回了您期望的结果。
  3. 如果仍然没有帮助,那么您将不得不重构代码,将其分解成可以独立验证的小块。这是单元测试是你的朋友的地方。在这种情况下,您可以创建一个方法,例如isClosestToTarget,并进行一些单元测试,以确保它在执行使用已经测试过的方法的方法之前完成您的预期。

答案 1 :(得分:0)

int[] numbers = new int[50];
int targetNumber = 75;
int closestDifference = targetNumber;
int closestNumber= 0;

for (int i = 0; i < numbers.length; i++){ numbers[i] = (int) random(1,100);

if(closestDifference > abs(numbers[i]-targetNumber){
closesDifference = abs(numbers[i]-targetNumber);
closestNumber= numbers[i];

}

println(closestNumber);

} }