Avatar billede laurits Nybegynder
26. marts 2003 - 11:12 Der er 22 kommentarer og
2 løsninger

Classer & Vector

Hejsa
Hvis jeg nu vil hente data fra klassen Konto til klassen Bank og indsætte disse i en Vector, hvad gør jeg så?
Jeg har lavet en metode til det.
import java.util.*;
class Konto
{    public int Belob;
    public int Kontonr;    
    public Konto(int b, int k)
    {    this.Belob = b;
        this.Kontonr = k;
    }
}

class Bank
{
    Vector Konti = new Vector();
    void Indsat();
    {  ; }
}

class Main
{   
    public static void main(String args[])
    {    
        Konto k = new Konto(100,1);
        Bank b = new Bank();
    }   
}
Avatar billede arne_v Ekspert
26. marts 2003 - 11:20 #1
Noget i retning af:

class Konto
{    private int Belob;
    private int Kontonr;   
    public Konto(int b, int k)
    {    this.Belob = b;
        this.Kontonr = k;
    }
}

class Bank
{
    Vector Konti;
    public Bank() {
      konti = new Vector();
    }
    public void add(Konto k) {
      konti.add(k);
    }
}

class Main
{   
    public static void main(String args[])
    {   
        Konto k = new Konto(100,1);
        Bank b = new Bank();
        b.add(k);
    }   
}
Avatar billede disky Nybegynder
26. marts 2003 - 11:23 #2
Hvis du så bytter Vector ud med en ArrayList eksekverer dit program hurtigere, Vector er syncronized hvilket sløver den.

ret bank klasse til:
class Bank
{
    Vector Konti = new Vector();
    void Indsat();
    public void tilføjKonti(Konto konto)
    {
      konti.add(konto);
    }
}
Avatar billede arne_v Ekspert
26. marts 2003 - 11:25 #3
Eller med lidt "mere":

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Konto k = new Konto(100, 1);
        Bank b = new Bank();
        b.add(k);
    }
}

class Konto {
    private int belob;
    private int kontonr;
    public Konto(int b, int k) {
        this.belob = b;
        this.kontonr = k;
    }
    public int getBelob() {
        return belob;
    }
    public int getKontonr() {
        return kontonr;
    }
    public void setBelob(int belob) {
        this.belob = belob;
    }
    public void setKontonr(int kontonr) {
        this.kontonr = kontonr;
    }

}

class Bank {
    Vector konti;
    public Bank() {
        konti = new Vector();
    }
    public void add(Konto k) {
        konti.add(k);
    }
    public int size() {
        return konti.size();
    }
    public Konto get(int ix) {
        return (Konto) konti.get(ix);
    }
}
Avatar billede laurits Nybegynder
26. marts 2003 - 11:26 #4
Hej Arne.
Tak for besvarelse. Jeg kan godt se og forstå hvad du har lavet, men jeg her lige et spørgsmål. Hvorfor add'er du i main metoden og ikke i Bank klassen. Det virker da mere logisk eller sådan fungere det kåske ikke?  :-)
Avatar billede arne_v Ekspert
26. marts 2003 - 11:26 #5
Bemærk at jeg har rettet navne til at starte med små i.s.f. med stort
(det plejer man).
Avatar billede laurits Nybegynder
26. marts 2003 - 11:28 #6
Øhh undskyld. Jeg overså vist noget før.  ;-)
Avatar billede arne_v Ekspert
26. marts 2003 - 11:32 #7
laurits>

Vi har kontoen i main, den adder jeg til banken, og bank adder
so kontoen til konti vektoren.
Avatar billede laurits Nybegynder
26. marts 2003 - 11:34 #8
Cool. Okay
Tak for din hjælp, så har jeg lidt at arb. videre med.  ;-)

Larits
Avatar billede laurits Nybegynder
26. marts 2003 - 12:23 #9
hvis jeg laver en Print metode som f.eks:
public void Print()
    {     
        System.out.println(konti.elementAt(0).toString());
    }
så bliver mit output:
Konto@256a7c
Jeg har add'ed mit element på plads nr. 0. Resultat er det samme selvom jeg laver et for loop.
Avatar billede arne_v Ekspert
26. marts 2003 - 12:23 #10
disky>

Iøvrigt er performance forskellen på ArrayList og Vector ikke
specielt stor med nyere JVM's.
Avatar billede laurits Nybegynder
26. marts 2003 - 12:25 #11
Glemte lige at spørge "Hvordan kan det være??" når mit indput er to int værdier??
Avatar billede arne_v Ekspert
26. marts 2003 - 12:30 #12
Du skal enten lave:

Konto k = konti.elementAt(0);
System.out.println(k.getBeloeb() + " " + k.getKontonr());

eller lave en specifik toString metode i Konto klassen.
Avatar billede arne_v Ekspert
26. marts 2003 - 12:32 #13
class Konto {
    private int belob;
    private int kontonr;
    public Konto(int b, int k) {
        this.belob = b;
        this.kontonr = k;
    }
    public int getBelob() {
        return belob;
    }
    public int getKontonr() {
        return kontonr;
    }
    public void setBelob(int belob) {
        this.belob = belob;
    }
    public void setKontonr(int kontonr) {
        this.kontonr = kontonr;
    }
    public String toString() {
        return ("[kontonr=" + kontonr + ",beloeb=" + belob + "]");
    }
}
Avatar billede arne_v Ekspert
26. marts 2003 - 12:32 #14
Default toString metoden som Konto har arvet fra Object klassen
er ikke særligt anvendelig.
Avatar billede disky Nybegynder
26. marts 2003 - 12:33 #15
arne:
Man anvender den metode der passer bedst til formålet, og har man IKKE brug for at det er syncronized så anvender man IKKE Vector, da den performer dårligere, ligegyldigt om forskellen i de nyere ikke er så stor som tidligere, så performer de alligevel dårligere.

At man anvender ArrayList istedet for Vector viser også overfor en kompetent lærer at man har et indblik i sproget.

De opgaver der stadigvæk indeholder Vector til sådanne ting, er tydeligtvis meget gamle, og ikke opdateret.
Avatar billede laurits Nybegynder
26. marts 2003 - 12:40 #16
Ja, okay det var jo en mulighed. Men så udskriver jeg jo egentlig ikke indholdet i Vector'en men kun input-datane i konto-klassen.
Og det er jo det jeg gerne vil.
Avatar billede arne_v Ekspert
26. marts 2003 - 12:44 #17
Nej.

Hvis man siger at man bruger Vector i.s.f. ArrayList af performance
hensyn til en kompetent lærer, så vil han konkludere at man baserer
sin viden på forældede bøger.

Ligesom brug af register keyword i C programmer heller ikke længere opfattes
som et smart trick til at optimere koden.
Avatar billede arne_v Ekspert
26. marts 2003 - 12:46 #18
laurits>

Du tilpasser din toString så den skriver alt relevant ud.

Bemærk at når de objekter du putter i din Vector har en fornuftig
toString så kan du også System.out.println'e den.
Avatar billede disky Nybegynder
26. marts 2003 - 12:59 #19
arne:
Nu jokker du godt nok rundt i det som en gal.

ArrayList er den man bruger forudsat man ikke vil havde det syncronized.

Men okay du har jo også engang hævdet at man godt kan lave streng behandling direkte på en String, da den kun var lidt langsomere end StringBuffer.
Så brug du bare den LANGSOMMERE Vector istedet.
Men det ville være godt hvis du ikke forsøgte at få andre til at begå samme fejl.
Avatar billede laurits Nybegynder
26. marts 2003 - 13:06 #20
Hallo i to....
Jeg har spurgt efter hjælp, fordi JEG ikke kunne løse en opgave hvor JEG havde valgt at bruge en Vector. Om det er rigtigt eller forkert er opgaven irrelevant.
Og jeg har værdsat den hjælp I begge har givet mig.
Men hvis I absolut vil slås om hvad der er rigtig og forkert, så er gør det et andet sted.
Avatar billede arne_v Ekspert
26. marts 2003 - 13:11 #21
disky>

I stedet for at referere hvad du har læst i diverse forældede
bøger så prøv og test !

Det der var sandt for 3-4 år siden er ikke længere sandt.
Avatar billede arne_v Ekspert
26. marts 2003 - 13:11 #22
laurits>

Undskyld.
Avatar billede laurits Nybegynder
26. marts 2003 - 13:17 #23
Arne, du bliver lige nødt til at forklare det lidt anderledes.
Hvorfor kan jeg ikke lave:
public void Print()
    {     
        System.out.println(toString(konti.elementAt(0))); 
    }   
  eller noget tilsvarende, til at udskrive mit element nr. 0
Avatar billede arne_v Ekspert
26. marts 2003 - 13:22 #24
Du mener:
  System.out.println(konti.elementAt(0).toString());
ikke ?

det kan du også godt hvis du laver en toString i Konto klassen.

Ellers så arver Konto klassen toString fra Object klassen.

Og Object klassens toString skriver kun klassens navn @ objektets
adresse ud.


Hvis du laver en toString i Konto som i mit eksempel så kommer
der et eller andet fornuftigt ud.
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

IT-JOB

Forsikrings- og pensionsakademiet A/S

IT-teknisk profil

Netcompany A/S

Test Consultant

Capgemini Danmark A/S

Open Application (Denmark)