Avatar billede sphere Nybegynder
25. oktober 2003 - 20:29 Der er 8 kommentarer og
1 løsning

Søge i ArrayList?

Jeg skal bruge en søgefunktion til ArrayList, min ArrayList består af objekter der er lavet af 3 Strings (titel og forfatter, genre) det skal derfor i søgefunktionen være muligt at søge på enten titel, forfatter eller genre...

jeg har en metode der hedder GetTitel() som returnerer titel, og ligeledes for de andre 2 Strings... tænker det måske kan bruges til noget?
Avatar billede arne_v Ekspert
25. oktober 2003 - 20:38 #1
Så bliver du nødt til at lave noget kode der løber hele ArrayListen igennem
og tester om der er match.
Avatar billede arne_v Ekspert
25. oktober 2003 - 20:40 #2
Jeg lavede for ikke ret lang tid siden følgende kode:

public class Item {
  private int ival;
  private String sval;
  public Item() {
      this(0, "");
  }
  public Item(int ival, String sval) {
      this.ival = ival;
      this.sval = sval;
  }
  public int getIval() {
      return ival;
  }
  public String getSval() {
      return sval;
  }
  public void setIval(int i) {
      ival = i;
  }
  public void setSval(String string) {
      sval = string;
  }
  public boolean equals(Object o) {
      if(o instanceof Item) {
        Item oitem = (Item)o;
        if((ival==oitem.ival) && (sval.equals(oitem.sval))) {
            return true;
        } else {
            return false;
        }
      } else {
        return false;
      }
  }
  public int hashCode() {
      return (sval.hashCode() + ival);
  }
  public String toString() {
      return ("[" + ival + "," + sval + "]");
  }
}


import java.util.Vector;

public class ItemList {
  private Vector list;
  public ItemList() {
      list = new Vector();
  }
  public void add(Item it) {
      list.add(it);
  }
  public Item get(int ix) {
      return (Item)list.get(ix);
  }
  public boolean contains(Item it) {
      return (list.indexOf(it) >= 0);
  }
  public boolean containsIval(int ival) {
      for(int i = 0; i < list.size(); i++) {
        if(get(i).getIval()==ival) {
            return true;
        }
      }
      return false;
  }
  public boolean containsSval(String sval) {
      for(int i = 0; i < list.size(); i++) {
        if(get(i).getSval().equals(sval)) {
            return true;
        }
      }
      return false;
  }
  public Vector findByIval(int ival) {
      Vector res = new Vector();
      for(int i = 0; i < list.size(); i++) {
        if(get(i).getIval()==ival) {
            res.add(get(i));
        }
      }
      return res;
  }
  public Vector findBySval(String sval) {
      Vector res = new Vector();
      for(int i = 0; i < list.size(); i++) {
        if(get(i).getSval().equals(sval)) {
            res.add(get(i));
        }
      }
      return res;
  }
  public String toString() {
      return list.toString();
  }
}

Det er ligegyldigt om det er ArrayList eller Vector - det er findBy metoderne
i ItemList du skal kigge på !
Avatar billede sphere Nybegynder
26. oktober 2003 - 09:41 #3
jeg er ret nybegynder, så hvad skal jeg skrive i min .java med main-metoden for at køre søgefunktionen? der må jo være en metode der kaldes som søger på de indtastede Strings?
Avatar billede arne_v Ekspert
26. oktober 2003 - 09:55 #4
Du læser søge streng ind og hvilket felt der skal søges i, så kalder
du den rigtige findBy og viser resultatet.
Avatar billede arne_v Ekspert
26. oktober 2003 - 09:56 #5
Eller skal du have et eksempel ?
Avatar billede sphere Nybegynder
26. oktober 2003 - 10:09 #6
meget gerne
Avatar billede arne_v Ekspert
26. oktober 2003 - 15:37 #7
import java.io.*;
import java.util.*;

public class TestPrompt {
  public static void main(String[] args) throws Exception {
      ItemList list = new ItemList();
      list.add(new Item(1, "a"));
      list.add(new Item(2, "bb"));
      list.add(new Item(3, "ccc"));
      list.add(new Item(4, "a"));
      list.add(new Item(5, "bb"));
      list.add(new Item(6, "ccc"));
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      while(true) {
        System.out.print("Enter I(val)/S(val)/Q(uit): ");
        String typ = br.readLine();
        if(typ.equals("I")) {
            System.out.print("Enter ival: ");
            int ival = Integer.parseInt(br.readLine());
            Vector res = list.findByIval(ival);
            for(int i = 0; i < res.size(); i++) {
              System.out.println((Item)res.get(i));
            }
        } else if(typ.equals("S")) {
            System.out.print("Enter sval: ");
            String sval = br.readLine();
            Vector res = list.findBySval(sval);
            for(int i = 0; i < res.size(); i++) {
              System.out.println((Item)res.get(i));
            }
        } else if(typ.equals("Q")) {
            break;
        }
      }
  }
}
Avatar billede sphere Nybegynder
28. oktober 2003 - 19:50 #8
nu har jeg siddet og lavet om til ArrayList... og det virker meget rigtigt, men får følgende fejl:

C:\cdkatalog\CDkatalogMain.java:168: cannot resolve symbol
symbol  : variable artist
location: class CDkatalogMain
                        ArrayList res = list.findByArtist(artist);
                                                                                  ^
C:\cdkatalog\CDkatalogMain.java:168: cannot resolve symbol
symbol  : variable list
location: class CDkatalogMain
                        ArrayList res = list.findByArtist(artist);
                                                                ^
nogen ideer til hvad der kan være galt? det er jo åbentbart list den er utilfreds med...
Avatar billede arne_v Ekspert
28. oktober 2003 - 19:53 #9
Umiddelbart lyder det jo som at du ikke har nogle variable ved
navn list eller artist ...
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