Avatar billede duedue Nybegynder
04. januar 2007 - 10:28 Der er 23 kommentarer og
1 løsning

Søgning i arraylist

Hej. Jeg har en arraylist med lagervarer hvor jeg skal kunne søge på varenavn og varenummer. Har lavet en klasse (Lagervare) som bl.a. indeholder attributterne varenavn og varenummer. Jeg har en grafisk brugergrænseflade hvor der er et søgefelt og en JList hvori søgeresultatet skal udskrives. Har prøvet at løbe arrayet igennem med forskellige løkker, men det er ikke lykkedes at få det til at fungere. Er i tvivl om hvordan jeg helt præcist skal definere koden så resultatet blir vist i JListen? Har skrevet koden i framen bag søgeknappen. (Bruger JDeveloper).
Avatar billede thomaskleist Nybegynder
04. januar 2007 - 11:22 #1
Kan du sende noget kode?
Avatar billede duedue Nybegynder
04. januar 2007 - 12:14 #2
Har slettet de forsøg jeg indtil videre har prøvet mig frem med, er helt på bar bund. Har bla. forsøgt mig med .equals() i en if sætning;

if( !Soegefelt.getText().equals("") ) return;

Men ved ikke helt hvad jeg skal definere i equals, den skal jo ha' at vide at det er arrayet den skal søge i, men er usikker på hvordan? Bagefter skal den så skrive den fundne søgte vare ud i JListen?
Avatar billede thomaskleist Nybegynder
04. januar 2007 - 12:49 #3
Har du overvejet at bruge en hashtable istedet for?
Avatar billede thomaskleist Nybegynder
04. januar 2007 - 12:50 #4
eller en typestærk arraylist
Avatar billede duedue Nybegynder
04. januar 2007 - 12:54 #5
Det har jeg ikke overvejet. Programmet har en del andre funktioner end "søg", vil egentlig helst ha' det til at fungere med min nuværende arraylist...
Avatar billede thomaskleist Nybegynder
04. januar 2007 - 13:29 #6
Prøv at kigge på contains i arraylist det er måske noget du kan bruge?
Avatar billede duedue Nybegynder
04. januar 2007 - 14:25 #7
Jo det kunne det godt være, men kan stadig ikke få sat det sammen så det fungerer... Jeg er meget ny i Java - nok derfor...;-) Du kunne vel ikke gi' et eksempel?
Avatar billede thomaskleist Nybegynder
04. januar 2007 - 14:58 #8
Prøver at lave et i aften sidder lige med et andet problem.. JNI
Avatar billede thomaskleist Nybegynder
04. januar 2007 - 15:02 #9
No sådanne noget ligende havede jeg tænkt mig
    public void udskriv(Vare v) {
  boolean con = false;
        if(varearray.contains(v)) {
        con = true;
        System.out.println("Arraylist continas"+v.getVarenavn() );
        int index = varearray.indexOf(v);
        Vare vare3 = varearray.get(index);
        System.out.println("" +vare3.getVarenavn() +"  "+vare3.getVarenr());
        }else {
    System.out.println("virker ikke");
        }
Avatar billede duedue Nybegynder
04. januar 2007 - 15:40 #10
Lyder super! Ser frem til en løsning i aften. Ikke for at stresse dig, men skulle helst gerne kunne bruge det i aften hvis det kan lade sig gøre...
På forhånd tak.
Avatar billede duedue Nybegynder
04. januar 2007 - 22:35 #11
Hej igen.

Jeg har prøvet mig lidt frem med din ovenstående kode. Det kan godt se ud til at kunne virke som jeg ønsker. Men kan du hjælpe mig til at definere at søgeteksten skal hentes fra JSoegefelt og resultatet skal skrives ud i JList1? Jeg takker på forhånd for hjælpen! P.S. Det vil være helt kanon hvis du kan hjælpe mig inden kl. 11 i morgen.
Avatar billede andreas Nybegynder
04. januar 2007 - 23:06 #12
Hvis du dine to attributter som udgangspunkt er globale i den forstand at alle dine metoder i klassen kan læse dem, kan du erstatte v i contains() med JSoegefelt.getText(),  og så erstatter du det sidste System.out.println med din jList1, hvor du adder det indhold du nu ønsker.
Avatar billede andreas Nybegynder
04. januar 2007 - 23:10 #13
public void udskriv()
{
  if (varearray.contains(JSoegefelt))
  {
    System.out.println("Arraylist continas"+v.getVarenavn() );
    int index = varearray.indexOf(v);

    Vare vare3 = varearray.get(index);

    // Udskift selv her...
    JList1.add...

    System.out.println("" +vare3.getVarenavn() +"  "+vare3.getVarenr());

  }
  else
  {
    System.out.println("virker ikke");
  }
}
Avatar billede duedue Nybegynder
05. januar 2007 - 09:30 #14
Hej Andreas. Nu har jeg prøvet mig frem, men kan ikke få det til at virke. Koden skal være bag knappen Soeg i min frame, så det står således;

private void Soeg_actionPerformed(ActionEvent e) {}
//og så kommer koden ind her

Min vare klasse hedder Lagervare og har attributterne:
    private String varenavn = "";
    private int varenummer = 0;

Mit søgefelt hedder "Soeg" og listen det skal skrives ud i hedder JList1. ArrayListen hedder al. Kan du hjælpe?
På forhånd tak!
Avatar billede andreas Nybegynder
05. januar 2007 - 16:30 #15
private void Soeg_actionPerformed(ActionEvent e) {

  if (al.contains(Soeg.getText()))
  {
    int index = al.indexOf(Soeg.getText());

    Lagervare vare = al.get(index);

  }
  else
  {
    System.out.println("virker ikke");
  }
}


Something like that...
Avatar billede duedue Nybegynder
09. januar 2007 - 10:25 #16
Hej Andreas. Først vil jeg lige takke for hjælpen og undskylde den sene tilbagevending. Jeg kan stadig ikke få den til at finde noget i ArrayListen og skrive det ud. Når jeg kører den, skriver den "virker ikke". Kan du se hvordan jeg skal definere at den skal søge på attributten varenummer i Lagervare og skrive søgeresultatet ud i JListen?

    private void Soeg_actionPerformed(ActionEvent e) {

          if (al.contains(Soeg.getText()))
          {
            int index = al.indexOf(Soeg.getText());

            Lagervare vare = (Lagervare)al.get(index);

          }
          else
          {
            System.out.println("virker ikke");
          }
    }
Avatar billede andreas Nybegynder
09. januar 2007 - 11:12 #17
Den skriver virker ikke, fordi din søge tekst ikke findes i dit array "al", hvad indeholder det array egentlig? Indeholder det Strings, eller "Lagrevare" ?
Avatar billede duedue Nybegynder
09. januar 2007 - 12:03 #18
Den indeholder vel "Lagervare". Tilføjer nye varer til al på følgende måde;
    private void Tilføj_actionPerformed(ActionEvent e) {
        Lagervare lagervare = new Lagervare();
        lagervare.setVarenavn( txtVarenavn.getText () );
        lagervare.setVarenummer( Integer.parseInt ( intVarenummer.getText () ));
        lagervare.setVarebeskrivelse( txtVarebeskrivelse.getText () );
        lagervare.setSalgspris( Double.parseDouble ( intSalgspris.getText () ));
        lagervare.setLokation( Integer.parseInt ( intLokation.getText () ));
        lagervare.setAntalpaalager(Integer.parseInt ( intAntalpaalager.getText () ));
       
        al.add(lagervare);
        jList1.setListData(al.toArray());
        gem();
Avatar billede andreas Nybegynder
09. januar 2007 - 12:16 #19
private void Soeg_actionPerformed(ActionEvent e)
{
  for(Lagervare vare : al)
  {
    if ( vare.getVarenavn().equalsIgnoreCase(Soeg.getText()) )
    {
      System.out.println("Fandt vare..");
    }
  }
}


Du skal i din lagervare klasse lave en metode der hedder getVarenavn(), som returnere varenavnet.
Avatar billede duedue Nybegynder
09. januar 2007 - 12:25 #20
Har lavet getVarenavn() og return varenavn i Lagervare klassen. Den kommer op med følgende fejl nu: Error(406,38): incompatible types; found: class java.lang.Object, required: class client.Lagervare.
Fejlen referer til denne sætning:
for(Lagervare vare : al)

Til info ser min Lagervare klasse således ud;

import java.io.Serializable;

public class Lagervare implements Serializable{

    public String varenavn = "";
    private int varenummer = 0;
    private String varebeskrivelse = "";
    private Double salgspris = 0.0;
    private int lokation = 0;
    private int antalpaalager = 0;
 
    public Lagervare() {
    }
    public void setVarenavn(String varenavn) {
        this.varenavn = varenavn;
    }
    public String getVarenavn() {
        return varenavn;
    }
    public void setVarenummer(int varenummer) {
        this.varenummer = varenummer;
    }
    public int getVarenummer() {
        return varenummer;
    }
    public void setVarebeskrivelse(String varebeskrivelse) {
        this.varebeskrivelse = varebeskrivelse;
    }
    public String getVarebeskrivelse() {
        return varebeskrivelse;
    }
    public void setSalgspris(Double salgspris) {
        this.salgspris = salgspris;
    }
    public Double getSalgspris() {
        return salgspris;
    }
    public void setLokation(int lokation) {
        this.lokation = lokation;
    }
    public int getLokation() {
        return lokation;
    }
    public void setAntalpaalager(int antalpaalager) {
        this.antalpaalager = antalpaalager;
    }
    public int getAntalpaalager() {
        return antalpaalager;
    }
    public String toString(){
        return varenavn + " " + varenummer + " " + varebeskrivelse + " " + salgspris + " " + lokation + " " + antalpaalager;
    }
}
Avatar billede duedue Nybegynder
09. januar 2007 - 12:30 #21
(Det er kun varenavnet jeg skal kunne søge på)
Avatar billede andreas Nybegynder
09. januar 2007 - 14:28 #22
Du skal lave dit varearray som:

ArrayList<Lagervare> al = new ArrayList<Lagervare>();
Avatar billede duedue Nybegynder
10. januar 2007 - 09:45 #23
Det kan godt være det er mig som roder total rundt i det, men jeg kan stadig ikke få det til at virke. Der sker ingenting når jeg trykker på søge knappen. Har lavet varearray som: ArrayList<Lagervare> al = new ArrayList<Lagervare>();
Avatar billede andreas Nybegynder
10. januar 2007 - 09:59 #24
Har du husket at lave i metoden, så den tilføjer data til din liste?

Det kan godt ske du MÅSKE skal repainte dit vindue, men det jo et helt andet spørgsmål du kan oprette...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester