Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1607
Hei!
Jeg sitter her og prøver å lage en metode som kan søke etter en String i et spesifisert felt i et objekt som ligger i en arraylist.
Jeg har et enkelt program med to klasser, en som heter Sykehus og en som heter Pasient. Pasient-klassen lagrer informasjon om pasienter, mens sykehuset lagrer de ulike pasientene i en ArrayList.
Patient er navnet på klassen.
patients er navnet på ArrayListen.
Her er metoden jeg prøver å lage:

/**
* Søk opp en pasient i systemet og vis pasientens informasjon
*/
public void searchForPatient(String searchIndex)
{
int index = 0;
boolean search = true;
while(search && index < patients.size()) {
String fullName = patients.get(index);
if(fullName.contains(searchIndex)) {
// Person funnet.
searching = false;
}
else {
//fortsett søk
index++;
}
}
if(searching) {
// Could not find search phrase
return -1;
}
}


det er mye mulig dette ikke er nok for å kunne forstå hva jeg prøver å oppnå, i tilfelle, please spør.

EDIT:
Dette er forresten feilmeldingen jeg får opp.
Please ikke flame meg for å bruke Blue J, er ikke første gangen jeg får høre det i såfall.
Sist endret av Lapskau5; 7. november 2015 kl. 21:59.
Du forsøker å konvertere et Patient-objekt til en String, men du har ikke fortalt Java hvordan dette skal gjøres.

Husker jeg Java riktig, så må Patient-klassen i dette tilfelle implementere funksjonen "toString()" for at dette skal virke. I denne klassen må du returnere et String-objekt, og dette må da inneholder tekst-representasjoner av det du ønsker å kunne søke etter.
Sist endret av Dyret; 8. november 2015 kl. 15:33.
Hei.
Du må gjøre noe ala dette:

Kode

String fullName = patients.get(index).getFullName()
Eller du kan gjøre noe ala dette.

Eksempel på kjøring blir da:
-----Query Freak--------
Hit for pasient: Fredrik Freak

-----Query Alf--------
Hit for pasient: Alf Hansen

-----Query Heiheihei--------
No match for query: Heiheihei

-----Query Duck--------
Hit for pasient: Ole Duck

-----Query Ol--------
Hit for pasient: Ole Duck
Hit for pasient: Olav Knutsen
Vis hele sitatet...
Sweeeeet! Tusen takk, fikk det endelig til. Det store problemet mitt var at jeg ikke viste hvordan jeg skulle kalle en metode på et objekt som ble hentet ut fra en ArrayList, slik som pax2k viste meg.
Hei.
Du må gjøre noe ala dette:

Kode:
String fullName = patients.get(index).getFullName()
Vis hele sitatet...
Sist endret av Lapskau5; 8. november 2015 kl. 02:46.
Så bra at du kom et skritt videre.

Et lite tips er å hente ut selve objektet og jobbe med det. Blir enklere å lese koden på denne måten.

Da kan du gjøre noe sånn:

Kode

  Pasient pasient = patients.get(index);
  
  String fullName = pasient.getNavn();
  Integer age = pasient.getAge();
  Date birthday = pasient.getBirthday();
  // osv.........
Sitat av pax2k Vis innlegg
Eller du kan gjøre noe ala dette.
Vis hele sitatet...
Kudos for efforten med kjørbart kodeeksempel!

Som en kuriositet tok jeg meg friheten til å modifisere den så den bruker noen gøyale Java 8-features slik som lambaer og streams, for spesielt interesserte. Fullstendig kode ligger her.

List<Pasient> results = patients.stream().filter(patient -> patient.getNavn().contains(searchIndex)).collect(Collectors. toList());
Denne linja lager en stream av patients-listen, og kjører deretter et filter som fjerner alle objekter hvor navnet ikke innholder strengen searchIndex. En stream gjør at man kan hekte på flere operasjoner slik som filtrering, mapping, summering av tall, o.l. Til slutt kjøres streamen gjennom collect for å gjøre resultatet til en liste igjen, som blir puttet i variabelen results.

results.forEach(patient -> System.out.println("Hit for pasient: " + patient.getNavn()));
Istedenfor å bruke en vanlig for-løkke så brukes det her en forEach med lamba-syntaks. forEach kan også brukes på streams.

Dr.Dobb's er en av mange som har en intro til lambaer og streams:
http://www.drdobbs.com/jvm/lambdas-a...ries/240166818