2014-12-03 54 views
0

基本上我是新来的java和创建一个小程序。我已经完成了大部分工作。基本上我现在有四个int,就像文件读取器所做的那样,并且通过scanner.in创建一个数字。我现在所要做的就是将四个int与scanner.in编号进行比较,并显示最接近scanner.in输入的编号。将多个数字与用户输入进行比较,找到最接近的答案。

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

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

干杯家伙。

+0

是数组中的输入,如果是,是否排序? – CBredlow 2014-12-03 20:05:59

+0

不,它不在数组中。我没有使用数组,尽管在试图弄清楚如何做到这一点,但数组似乎是最简单的方法。 – Oneinchwalrus 2014-12-03 20:19:35

回答

1

创建另一个int调用closestAnswer或类似的东西。这将是你最后返回的结果。默认情况下,closestAnswer将初始化为第一个intguess1)。如果guess2actualAnswer之间的差值小于closestAnsweractualAnswer之间的差值,则guess2将成为新的closestAnswer。然后重复guess3guess4的步骤。最后,closestAnswer将表示哪个猜测最接近actualAnswer

+0

也对猜测值[1..4]进行排序,以便您也可以使用二进制搜索。 – 2014-12-03 20:15:52

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组的比较有类似的逻辑。希望这可以帮助。

0

有几个方法可以做到这一点,但我会选择一小会儿环

int lowerBound = input, upperBound = input; 

现在arrayOfNumbers应该是一个ArrayList,所以它可以使用包含方法。你也可以使用一个数组,但是这样你就不得不遍历自己,这只会增加不必要的麻烦。

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); 
} 

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

相关问题