2014-02-05 79 views
0

我真的需要一些幫助解決這個問題。我試圖用Java代碼編寫一個函數,但是我被卡住了,我不知道如何繼續。我有這個數據包含1行(區)和7列(醫院)。該地區有一個百分比,這個人會在醫院1結束了,另一個%的將在H2等最終的數據看起來是這樣的:如何從陣列中獲得第二高值,第三高值等

hospital h1 h2 h3 ... 
area 
a1  11 45 3 ... 

我曾經在一個雙陣列保存的數據包含7個值。我有這個隨機生成器fcn,它隨機選擇我們所在的數組中的哪個索引值。如果這個隨機生成器選擇指數= 0這將意味着11%,如果它隨機選擇索引= 2,這將意味着3%等

問題是,我做完這個後,我想檢查這家醫院是否閒置或不。如果它是空閒的,那麼我想返回隨機選擇的整數索引值。如果不是空閒的,我想選擇第二高百分比的醫院,如果該醫院處於空閒狀態,則返回此int指數值,否則繼續並檢查第三高百分比並進行另一次檢查等。如果所有醫院都沒有閒置,則返回隨機選擇的值。

這是我迄今所做的:

double vector[] = new double[distrToEachHosp.length](); 

//start by setting the contents to index 
for(int index=0; index<vector.length; index++){ 
     vector[index] = index; 
} 
for(int i=0; i <= vector.length; i++){ 
    for(int x=1; x <= vector.length; x++){ 
     if (distrToEachHosp[vektor[x]] > distrToEachHosp[vektor[x+1]]){ //compare content that corresponds to index 
      //move index 
      int temp = vector[x]; 
      vector[x] = vector[x+1]; 
      vector[x+1] = temp; 
     } 
    }   
} 
return vektor; 


int rndValue = randomGenerator(distrToEachHosp); 

for(int i=0; i<vector.length; i++){ 
    if(hospital.get(i).namn == hospitalNameVariable[rndValue]){ //hospitalNameVariable is a variable containing the names of the hospitals 
     if(hospital.get(i).idle()>0){ 
    return rndValue;     
    } else { 
       if(vector[0] >= rndValue) { 
     return vector[0]; 
     } else if(vektor[1] >= slumpVärde) { 
      ...... 
     } 

} 

} 

這是我卡住。我現在用第一種算法對數據進行排序,但從邏輯上講,我不知道如何包含所有的情況。

+1

你爲什麼不簡單地排序呢? O.o –

回答

0

您可以使用Arrays.sort(vector)進行排序而不是執行。

而且你總是可以通過像分別 vector[vector.length-2]vector[vector.length-3]索引訪問第二和第三值。

0

沒有理由每次選擇醫院時對數組進行排序,這看起來就像您正在嘗試的那樣。

如果您在程序開始時對數組進行一次排序,那麼它非常容易。將索引設置爲隨機選擇,如果索引不空閒,則減少索引,如果索引不空閒,則減少索引,重複,直到找到空閒或用完選項。由於數組總是處於排序順序,因此無論您身處何處,您總是知道下一個最佳選擇是數組中的前一個值。 Hth

+0

我以爲我在代碼的開頭對它進行排序?...這是以返回向量結束的for循環...但是,如果我已經對它進行了排序45 11 3,那麼如果rndValue是例如11即我的指數,那麼我將如何減少它。我會如何寫它? – user2481390

+0

也許我誤解了你的代碼。假設你已經按照哪個答案是「最好的」排序了數組,下一個最好的結果總是離最好的結果有一個元素。所以如果你不能返回你正在考慮的索引,你想要考慮下一個或上一個元素(只是取決於你在開始排序數組的方向,只要你一致就可以)。重複這個過程,你會發現最好的結果,或沒有有效的結果。 – user3109924

+0

你能將原始作業發佈在我可以閱讀的地方嗎?我不知道我明白你想要做什麼。不想通過假設我給出不好的建議。 – user3109924