将多个数字与用户输入进行比较,以找到最接近的答案。

时间:2014-12-03 20:00:02

标签: java comparison

基本上我是java新手并创建一个小程序。我已经完成了大部分工作。基本上我现在有四个int,由文件读取器完成,以及通过scanner.in制作的数字。我现在要做的就是将四个int与scan.in数字进行比较,并在scan.in输入中显示最接近的数字。

我不确定从哪里开始,因为它是关于比较结果而我之前没遇到过的。

任何帮助表示赞赏,我只需要知道从哪里开始,真的。

干杯队员。

3 个答案:

答案 0 :(得分:1)

创建另一个名为int的{​​{1}}或类似内容。这将是您最后返回的结果。默认情况下,closestAnswer会初始化为第一个closestAnswerint)。如果guess1guess2之间的差异小于actualAnswerclosestAnswer之间的差异,actualAnswer将成为新的guess2。然后重复closestAnswerguess3的步骤。最后,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);
}

基本上,它向上和向下搜索以找到最接近的数字。如果你不使用底片,这会更容易,但我认为我比抱歉更安全。如果你正在使用小数......那么......那也是一个不同的故事。