我非常努力地理解这个概念(数组),但我遇到了很多麻烦(这是我的第一个计算机科学课程。)这是我的代码,问题评论在顶部。我试图解决这个问题,但我认为我的逻辑是正确的,因为我没有得到理想的答案。
// 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);
}
}
虽然我非常感谢正确答案,但我很乐意听到为什么它是正确答案,以及如何继续我可以改进我的逻辑以便我可以做到在我自己的未来。
答案 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)) {
现在,关于你如何自己找到它,这里有一些提示:
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);
} }