标题中提到的问题已经得到解答,但是我受到一些约束,需要一个不同的解决方案。
在数组中找到最接近的值的答案:
int myNumber = 490;
int distance = Math.abs(numbers[0] - myNumber);
int idx = 0;
for(int c = 1; c < numbers.length; c++)
{
int cdistance = Math.abs(numbers[c] - myNumber);
if(cdistance < distance)
{
idx = c;
distance = cdistance;
}
}
int theNumber = numbers[idx];
关于使我的问题具体到什么问题的一些背景知识:
我的程序接收了医院患者的PriorityQueue。有3个手术室,该程序将输出这3个手术室的8小时(工作日)时间表,此外我的&#34;推迟&#34;阵列,包含那天没有切割的患者。我有一个名为roomCapacity的数组,其中包含每个房间的剩余小时数。继承人我的问题比标题更具体。上面的答案使用了每个数字之间的距离,在我的情况下,选择具有最小距离(最佳拟合)的roomCapacity。但有时候DIFFERENCE是-1。我意识到Math.abs确保DISTANCE为正,但在这种特殊情况下我没有理由使用绝对值,因为如果操作的持续时间长于容量,则可能无法在房间中安排操作。房间。 DISTANCE(差值的绝对值)必须大于OR等于零。我已经花了我已经决定适得其反,试图寻找解决方案,并非常感谢一些提示。
急着完成这项工作后,我将上述代码打到我的方法中,并且只有在使用调试器后才意识到我将患者放在容量小于操作持续时间的房间中,但最好是忽略所说的最合适约束。
(EDIT)具体问题:如何使用与上面显示的方法类似的方法在roomCapacity数组中找到最接近的数字(int d),同时考虑到差异可能不小于0?
(这是我的第一个问题,对模糊性的批评)
我的方法:
public int getBestRoom(int d)//int d = currentOperationDuration
{
int roomNumber;
/**
*int distance = Math.abs(roomCapacity[0] - d);
*int idx = 0;
*for(int c = 1; c < 3; c++)
*{
* int cdistance = Math.abs(roomCapacity[c] - d);
* if(cdistance < distance)
* {
* idx = c;
* distance = cdistance;
* }
*roomNumber = idx;
*}
**/
return roomNumber;
}
答案 0 :(得分:0)
简单,删除所有Math.abs
并仅测试正距离:
int myNumber = 490;
int distance = Integer.MAX_VALUE;
int idx = 0;
for(int c = 0; c < numbers.length; c++)
{
int cdistance = numbers[c] - myNumber;
if (cdistance < distance && cdistance >= 0)
{
idx = c;
distance = cdistance;
}
}
int theNumber = numbers[idx];