2014-02-05 7 views
0

Мне действительно нужна помощь с этой проблемой. Я пытаюсь написать функцию в Java-коде, но я застрял, и я не знаю, как продолжить. У меня есть эти данные, содержащие 1 строку (площадь) и 7 столбцов (больницы). Для области есть процент, что этот человек будет в конечном итоге в больнице 1, еще один процент будет в конечном итоге на h2 и т.д. Данные выглядит примерно так:Как получить второе наивысшее значение из массива, третье самое высокое значение и т. Д.

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

Я сохраненные данные в двойном массиве содержащий 7 значений. У меня есть случайный генератор fcn, который случайным образом выбирает значение индекса, где в массиве мы находимся. Если этот случайный генератор выбирает, например, index = 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

Смежные вопросы