2013-05-11 4 views
0

У меня есть 2 arraylist, записи которых хранятся как объекты.
Первый объект arraylist имеет такие атрибуты, как идентификатор пациента, totaltestcost, totaltreatmentcost. Второй объект arraylist имеет атрибуты, такие как идентификатор пациента, совокупный заряд.Добавление атрибутов в 2 arraylists

Теперь моя проблема в том, когда я пытаюсь добавить общее количество, то есть totaltestcost + totaltreatmentcost + totalservicecharges, для данного идентификатора пациента, я не могу добавить общее количество и отобразить его.

Я узнал, что, поскольку он находится в 2 массивах, мне нужно искать массивы по идентификатору и получать издержки.

Это так, как я искать записи пациента общественного patient_class searchrecord (пациенты ArrayList, строка поиска) {

for(patient_class patient: patients) //used enhanced for loop 


     if(patient.getid().equals(search)) 
     { 

      return patient; 
     } 
    return null; 

}

Есть ли возможность, которую я могу изменить этот код получить затраты, хранящиеся в 2 массивах?

, например, как это: -

общественного ИНТ searchrecord (пациенты ArrayList, поиск String) {

for(patient_class patient: patients) //used enhanced for loop 


     if(patient.getid().equals(search)) 
     { 

      int total= patient.gettotaltestcost + patient.gettotaltreatmentcost 
     } 
    return null; 

} Но если я использую выше метод плохо только быть в состоянии получить общее totaltestcost + totaltreatmentcost, мне также нужно получить полезную нагрузку, но ее в другом массиве.

Итак, как я могу это сделать?

Спасибо за ваше время.

Edit: -

Наконец я сумел сделать это, ребята, и вот как я это сделал: -

общественного Струнный addtotal (пациенты ArrayList, поиск String, ArrayListpatient2, String Search2) { ИНТ Всего;

for(patient_class patient: patients) //used enhanced for loop 

    { 
     if(patient.getid().equals(search)) 
     { 



     for(patient_class patient3: patient2) 
     { 
      if(patient3.getid().equals(search2)) 
      { 
       total=patient.gettreatmentcost()+patient.gettestcost()+patient3.getservicecharge(); 

       return Double.toString(total); 
      } 
     } 
     } 
    } 

    return null; 

}

я прошел в обоих массивах сразу.

Спасибо всем за ваши ответы обмена, в следующий раз больной обязательно использовать Древовидные карты

+1

По-моему, вы используете неправильную структуру данных для работы. Структура карты, где идентификатор пациента является ключом, а значение - объект пациента, было бы намного лучше подходит для работы. Это позволит оценить стоимость O (1) при поиске. – 3xil3

+0

вещь, которая слишком поздно меняет структуру сейчас, мне нужно дать этот проект в ближайшее время. Пожалуйста, помогите, если это возможно. Спасибо –

+1

Ну, я бы хотел помочь, но мне понадобится дополнительная информация о втором массиве. Я вижу только 1 массив, описывающий список пациентов. Но я понятия не имею, как выглядит второй. Является ли этот второй список также списком пациентов, и если да, то какой метод мы ищем? – 3xil3

ответ

1

Есть много чего не так с вашим кодом, но кодирование вашей функциональности и игнорирование надлежащего java coding conventions (которое вы явно игнорируете по какой-то причине и которое я не собираюсь исправлять). Я придумал это. 1 метод поиска вашего пациента в вашем списке и 1 метод для вычисления общей суммы пациентов из 2 списков.

public patient_class findPatient(List<patient_class> patients, String search) { 
    for(patient_class patient: patients) //used enhanced for loop 
     if(patient.getid().equals(search)) 
     { 
      return patient; 
     } 
    } 
    return null; // no patient found matching the search id 
} 

public int calculatePatientTotal(List<patient_class> patientsList1, List<patient_class> patientsList2, String search){ 
    patient_class patientInList1 = findPatient(patientsList1,search);// assuming unique id 
    patient_class patientInList2 = findPatient(patientsList2,search);// assuming unique id 

    int total=0; 
    // calc general total 
    if(patientInList1!=null{ 
     // I'm assuming you put these getters in methods instead of public properties! 
     // hence the brackets at the end 
     total= patientInList1.gettotaltestcost() + patientInList1.gettotaltreatmentcost(); 
    } 

    // add any extra charges 
    if(patientInList2!=null){ 
     // I'm assuming this is the method that calculates the other charges in that patient object. 
     total+= patientInList2.getOtherCharges(); 
    } 

    return total; 
} 

В следующий раз я бы порекомендовал вам подумать о правильных структурах, которые необходимо использовать, и в основном не разбрасывать ту же информацию по различным предметам.

1

Я думаю, что вы забыли о else ключевое слово. Все ваши два метода будет возвращать только null

Вам нужно написать somethink так:

public patient_class searchrecord(ArrayList patients, String search) { 

for(patient_class patient: patients) //used enhanced for loop 


    if(patient.getid().equals(search)) 
    { 
     return patient; 
    } 
    else 
     return null; 
} 

и это

public int searchrecord(ArrayList patients, String search) { 

for(patient_class patient: patients) //used enhanced for loop 


    if(patient.getid().equals(search)) 
    { 
     int total= patient.gettotaltestcost + patient.gettotaltreatmentcost; 
     return total; 
    } 
    else 
     return null; 
} 
+0

Спасибо, я его отредактировал, но я не могу добавить общее количество. –

1

Я рекомендовал бы изменить структуру данных для отображения. Если вам нужно использовать два списка массивов, вы можете написать метод, который вернет вам желаемый результат в виде целого числа. Это неэффективно.

public static int total(List<Patient> firstList, List<Patient> secondList, int search) 
{ 
    int total = 0; 

    for(Patient p:firstList) 
    { 
     if(p.getId() == search) 
     { 
      total = p.getServiceCost(); 
      for(Patient p2 : secondList) 
      { 
       if(p2.getId()== search) 
       { 
        total += p2.gettotaltestcost() + p2.gettotaltreatmentcost(); 
        break; 
       } 
      } 
     } 
    } 
    return total; 
} 

Это из-под головы без тестирования, поэтому у вас могут быть ошибки. Я предположил, что id является целым числом, вы можете изменить его на .equals, если это String. Я надеюсь, что это помогает. Если ваш тип patient_class, то, конечно, измените все пациенты на patient_class. В вашей основной вы можете сделать что-то вроде

List<patient_class> list1 = new ArrayList<patient_class>(); 
List<patient_class> list2 = new ArrayList<patient_class>(); 
// populate those lists 
int search = 12;  
int result = total(list1, list2, int search); 

Btw вы можете передать любое количество списков в качестве аргументов метода, пока вы задаете thei

public int(ArrayList a, ArrayList b) 

не компилировать.

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