Avatar billede pyroman Nybegynder
07. marts 2004 - 18:07 Der er 19 kommentarer og
1 løsning

Tjekke om variabel i objekt i en vector allerede eksisterer

Hej igen igen...

Endnu en dårlig titel, men jeg kan ikke gøre for det...

Jeg har en vector med nogle (næsten) ens objekter, der alle har variablen "name". Jeg har så en anden variabel - og jeg vil gerne tjekke om 'navnet' allerede eksisterer i et af objekterne i vectoren...

Hvordan gør man dette mest smertefrit?

Vielen danke på forhånd!
Avatar billede arne_v Ekspert
07. marts 2004 - 18:15 #1
Du er nødt til at lave en løkke der checker alle elementer i vektoren.

Hvis du havde brugt en HashMap med name som key kunne du have checket nemt.
Avatar billede arne_v Ekspert
07. marts 2004 - 18:15 #2
Noget a la:

for(it i = 0; i < v.size(); i++) {
  X x = (X)v.get(i);
  if(x.getName().equals(target)) {
      // bingo
  }
}
Avatar billede pyroman Nybegynder
07. marts 2004 - 18:23 #3
Ja jeg ville også selv have lavet en løkke, men da jeg jo er ny til Java vidste jeg ikke om der var en slags "search"-funktion...

Hvordan fungerer det det HashMap? det må du gerne uddybe - går udfra at man skal bruge hash-koderne til et eller andet...
Avatar billede pyroman Nybegynder
07. marts 2004 - 18:30 #4
aha - har jeg ret i hvis det har noget med dette at gøre?:

HashMap navne = new HashMap();
navne.put(objektKey, navn);

??
Avatar billede arne_v Ekspert
07. marts 2004 - 18:31 #5
Ja.

Hvis du laver:

hm.put(x.getName(), x);

så kan du altid lave en:

(X)hm.get(target)
Avatar billede pyroman Nybegynder
07. marts 2004 - 19:22 #6
Hvad er x? variablen eller objektet? - kan ikke lige se hvad getName() gør? Er det ikke hash-koden man skal indikere i første parameter? - den findes vel med hashCode() ?? Eller mig der er smådum stadigvæk?
Avatar billede arne_v Ekspert
07. marts 2004 - 19:58 #7
x er det objekt du gemmer - X er den klasse som x er en instans af

(jeg ced jo ikke havd dine klasser hedder så jeg vælger noget generelt)
Avatar billede arne_v Ekspert
07. marts 2004 - 19:59 #8
Jeg antager at X klassen indeholder en identifikation name og har en
getName og setName metode.
Avatar billede arne_v Ekspert
07. marts 2004 - 20:00 #9
Nej - du gemmer i en hash map med noget du kender og kan bruge når du skal
finde objektet frem igen.

hashCode er noget HashMap bruger internt !
Avatar billede pyroman Nybegynder
08. marts 2004 - 21:05 #10
Den der getName() det er så bare en metode jeg selv laver??? altså fx:

public String getName(){
  return this.nameVar;
}

???
Avatar billede arne_v Ekspert
08. marts 2004 - 21:07 #11
Ja.

Java god skig og brug er at:

private String name;
private int foobar;
public String getName() {
  return name;
}
public int getFoobar() {
  return foobar;
}
Avatar billede arne_v Ekspert
08. marts 2004 - 21:08 #12
skik
Avatar billede pyroman Nybegynder
08. marts 2004 - 21:20 #13
Hvad er skikken? Er det egentlig ikke den eneste måde at gøre det på?
Avatar billede arne_v Ekspert
08. marts 2004 - 21:23 #14
skikken er at mantager variablens navn, laver første bogstav stort og sætter
get foran.

Derfor:

public String getNameVar(){
  return this.nameVar;
}

eller:

public String getName(){
  return this.name;
}
Avatar billede pyroman Nybegynder
08. marts 2004 - 21:40 #15
Ja, det tror jeg også selv jeg ville have gjort - men i de programmeringssprog jeg normalt skriver er jeg vent til at man kan skaffe variablen fra en klasse ved bare at at skrive: "Klasse.navnPåVar"

Lige en ting til:

Hvorfor skal man angive konstruktør klassen i parentes ved get() - returnerer den da hele objektet?
Avatar billede arne_v Ekspert
08. marts 2004 - 21:42 #16
I C++ laver man ofte variable public og undlader en Get metode.

Men Get metoder er blevet moderne de senere år !
Avatar billede arne_v Ekspert
08. marts 2004 - 21:43 #17
Det sidste spørgsmål forstod jeg ikke.
Avatar billede pyroman Nybegynder
08. marts 2004 - 21:51 #18
Det er da åndsvagt at lave globale variabler...

Mit spørgsmål er: Hvorfor står der (X)hm.get(); og ikke bare hm.get();??
Avatar billede arne_v Ekspert
08. marts 2004 - 21:53 #19
HashMap klassens get metode returnerer formelt set et Object.

Reelt er det naturligvis den klasse som du har gemt.

Men for at kunen assigne er du nødt til at type caste fra Object til den
rigtige klasse.
Avatar billede pyroman Nybegynder
13. marts 2004 - 17:42 #20
Undskyld arne... jeg har siddet og koget den for meget - glemte helt dette spm...

Det virker bare super det du har lært mig dér - mega brugbart.

Takser mange mange :)
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