2014-04-14 126 views
0

标题中提到的问题已经得到解答,但有一些限制,我需要采用不同的解决方案。查找阵列中最接近的数字而不是阵列中的数字

这个问题的答案在数组中查找最接近的值到一个数字:

 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小时(一个工作日)时间表,此外我的“推迟”阵列包含那天没有进行切割的患者。我有一个名为roomCapacity的数组,其中包含每个房间的剩余小时数。下面我的问题比标题更具体。上面的答案使用每个数字之间的距离,在我的情况下选择最小距离(最适合)的roomCapacity。但有时候差别是-1。我意识到Math.abs确保DISTANCE是正数,但在这种特殊情况下,我没有理由使用绝对值,因为如果操作的持续时间长于容量,则操作可能不会安排在房间中房间。 DISTANCE(差值的绝对值)必须大于或等于零。我已经花费了我已经决定适得其反的方法来寻找解决方案,并且非常感谢一些提示。

为了完成这个任务,我把上面的代码打到了我的方法中,只有在使用调试器后才意识到我将患者放置在容量小于操作持续时间的房间中,但是最适合忽略所述约束。

(EDIT)具体问题:如何在我的roomCapacity数组中使用类似上述方法找到最接近的数值(int d),同时考虑到差值可能不小于0 ?

(这是我的第一个问题,appologies的歧义)

我的方法:

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; 
} 
+2

你能把这个改为一个具体的问题,而不是“我不知道,我需要一个提示吗?”如果不是,代码审查请求会发送到Stack Exchange的另一部分。 – keshlam

+0

“距离(差值的绝对值)必须大于或等于零。” - 为什么除了'Math.abs()'之外,你还要检查一下?只需检查'roomCapacity [c] - d> = 0'。当然,那么你必须考虑你无法占用任何空间的情况,并且可能会返回-1或其他值。 –

+0

如果当前患者没有适合的房间,我的代码甚至不会达到这一点。此外,我试图尝试使用> = 0,但导致过度使用if语句,我试图避免这种情况,它让人困惑,难以跟踪我的代码正在做什么。 – oog

回答

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]; 
+0

这不起作用。考虑myNumber = 4,我的数组roomCapacity {3,8,8} ...我希望我的方法返回的索引是1,因为它不能放在0中,并且无论我是将它放在1还是2中因为他们是平等的,整个观点都找到最合适的。你的解决方案将它放置在roomCapacity [0] – oog

+0

仍然失败了相同的测试用例,但给了我一个想法,从今天开始,我从今天开始进行调查,以便进一步调查明天的病态。谢谢 – oog