基本上我是java新手并创建一个小程序。我已经完成了大部分工作。基本上我现在有四个int,由文件读取器完成,以及通过scanner.in制作的数字。我现在要做的就是将四个int与scan.in数字进行比较,并在scan.in输入中显示最接近的数字。
我不确定从哪里开始,因为它是关于比较结果而我之前没遇到过的。
任何帮助表示赞赏,我只需要知道从哪里开始,真的。
干杯队员。
答案 0 :(得分:1)
创建另一个名为int
的{{1}}或类似内容。这将是您最后返回的结果。默认情况下,closestAnswer
会初始化为第一个closestAnswer
(int
)。如果guess1
和guess2
之间的差异小于actualAnswer
和closestAnswer
之间的差异,actualAnswer
将成为新的guess2
。然后重复closestAnswer
和guess3
的步骤。最后,guess4
将代表哪个猜测最接近closestAnswer
。
答案 1 :(得分:0)
这非常类似于找到数组中的最小数字,只有你在一组数字中找到最小的差异。
如果您的4个数字位于某种列表/数组/可迭代集合中,您可以使用for循环快速单步执行该数字。
它可能看起来像这样
int currentClosest = numbers[0];
int smallestDifference = Math.Abs(scannedNum - number[0]); //or other infinity-value
for(int i = 1; i < number.length; i++) //iterate through array
{
int currentDifference = Math.Abs(scannedNum - number[i]);
if ( currentDifference < smallestDifference) //If this element is closer do stuff
{
currentClosest = number[i];
smallestDifference = currentDifference;
}
}
//print currentClosest
如果您的数字不在数组或类似的数组中,您可以将它们合并为一个,或者只是手动编码与类似逻辑的4个比较。希望这会有所帮助。
答案 2 :(得分:0)
你有几种方法可以做到这一点,但我会选择一个小循环
int lowerBound = input, upperBound = input;
现在arrayOfNumbers应该是一个ArrayList,因此它可以使用contains方法。你也可以使用数组,但是你必须自己迭代,这只会增加不必要的麻烦。
while (!arrayOfNumbers.contains(lowerBound) && !arrayOfNumbers.contains(upperBound) {
lowerBound--;
upperBound++;
}
// I'm using two 'if's, because there can be two closest
// numbers, if the input is directly between two values.
if (arrayOfNumbers.contains(lowerBound)) {
System.out.println(lowerBound);
}
if (arrayOfNumbers.contains(upperBound)) {
System.out.println(upperBound);
}
基本上,它向上和向下搜索以找到最接近的数字。如果你不使用底片,这会更容易,但我认为我比抱歉更安全。如果你正在使用小数......那么......那也是一个不同的故事。