2014-04-14 133 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