Avatar billede gladmhensk Nybegynder
05. september 2003 - 20:31 Der er 37 kommentarer og
2 løsninger

objekter i array ?

Har lige jokket i spinaten :/

Ville høre, om man ikke kan sætte objekter i array med en for løkke på en eller anden måde ?

Klasse.java

public class Klasse
{

private static int Count = 0;
private int ElevNr;
private String Navn;

//****************COUNT**************************
static int getCount()
{

return Count;

}
//****************ElevNR***************************
public void setElevNr(int Nr)
{

ElevNr = Nr;
Count++;
}

public int getElevNr()
{

return ElevNr;

}
//****************NAVN***************************
public void setNavn(String Nvn)
{

Navn = Nvn;


}

public String getNavn()
{

return Navn;

}
}





Udskriv.java



public class Udskriv
{

Klasse Elev1 = new Klasse();
Klasse Elev2 = new Klasse();
Klasse Elev3 = new Klasse();
Klasse Elev4 = new Klasse();
Klasse Elev5 = new Klasse();
Klasse Elev6 = new Klasse();
Klasse Elev7 = new Klasse();
Klasse Elev8 = new Klasse();
Klasse Elev9 = new Klasse();
Klasse Elev10 = new Klasse();
Klasse Elev11 = new Klasse();
Klasse Elev12 = new Klasse();
Klasse Elev13 = new Klasse();
Klasse Elev14 = new Klasse();
Klasse Elev15 = new Klasse();
Klasse Elev16 = new Klasse();
Klasse Elev17 = new Klasse();

public Udskriv()
{
    Elev1.setElevNr(1);
    Elev1.setNavn("Jens");
    Elev2.setElevNr(2);
    Elev2.setNavn("Poul");
    Elev3.setElevNr(3);
    Elev3.setNavn("Martin");
    Elev4.setElevNr(4);
    Elev4.setNavn("Mark");
    Elev5.setElevNr(5);
    Elev5.setNavn("Camilla");
    Elev6.setElevNr(6);
    Elev6.setNavn("Mia");
    Elev7.setElevNr(7);
    Elev7.setNavn("Mads");
    Elev8.setElevNr(8);
    Elev8.setNavn("Marcel");
    Elev9.setElevNr(9);
    Elev9.setNavn("Kristina");
    Elev10.setElevNr(10);
    Elev10.setNavn("Poul");
    Elev11.setElevNr(11);
    Elev11.setNavn("Dennis");
    Elev12.setElevNr(12);
    Elev12.setNavn("Jonas");
    Elev13.setElevNr(13);
    Elev13.setNavn("Peder");
    Elev14.setElevNr(14);
    Elev14.setNavn("Peter");
    Elev15.setElevNr(15);
    Elev15.setNavn("Anne");
    Elev16.setElevNr(16);
    Elev16.setNavn("Sofie");
    Elev17.setElevNr(17);
    Elev17.setNavn("Anders");

System.out.println("Antal elever i klasse: "+ Klasse.getCount());



}




public static void main(String[] args)
{
Udskriv udskriv = new Udskriv();

}


}




Som det kan ses er der en masse objekter, men det giver jo et problem hvis jeg vil skrive alle navne...det bliver pænt mejt jeg skal copy/paste....nogle idéer ?
Avatar billede erikjacobsen Ekspert
05. september 2003 - 20:38 #1
Klasse elev = new Klasse[7];

for (int i=0;i<7;i++) {
  elev[i] = new Klasse();
}
Avatar billede erikjacobsen Ekspert
05. september 2003 - 20:39 #2
Klasse elev[] = new Klasse[7];
Avatar billede simonvalter Praktikant
05. september 2003 - 20:47 #3
jeg ville nok lave en Elev klasse

med en constructor public Elev(String navn, int elevnr)

+ set/get  og toString() metoder

og en Klasse klasse hvor jeg tilføjede eleverne til vector/array ..
med addElev() og evt nogle getElev(er) metoder m.m.



så opretter du en Elev e1 = new Elev("pia",1);
og Klasse k1 = new Klasse();
og tilføjer elever til klassen
k1.addElev(e1);
osv..
Avatar billede simonvalter Praktikant
05. september 2003 - 20:51 #4
nu er jeg ikke den der har allermest styr på java men det ser mig lidt mærkligt ud det du laver der.

hvis du vil vide hvor mange elever du har i klassen skal du også bare have fat i size() på dit array/vector
Avatar billede gladmhensk Nybegynder
05. september 2003 - 21:35 #5
Tror jeg gør som loadet....det var fordi, at jeg ændrede planer da jeg lavede det, og så blev det rod :/

Loadet og erikjacobsen skriv lige et svar..
Avatar billede erikjacobsen Ekspert
05. september 2003 - 21:39 #6
private static int Count = 0;
er nu ikke så mærkeligt. Det giver netop en fælles attribut for
alle instanser.
Avatar billede gladmhensk Nybegynder
05. september 2003 - 21:52 #7
ER det muligt at have en metode med både Int og String's, som retunerer ?
Avatar billede erikjacobsen Ekspert
05. september 2003 - 21:56 #8
Du kan kun returnere een slags ting i en metode.
Avatar billede gulbaek Nybegynder
05. september 2003 - 21:58 #9
Nope, man kan kun returnere en ting, med mindre selvfølgelig det var skrevet i C# :-)
Avatar billede erikjacobsen Ekspert
05. september 2003 - 22:03 #10
Men du kan returnere et objekt der indeholder en int og en String, hvis
det er hvad du mener?
Avatar billede gladmhensk Nybegynder
05. september 2003 - 22:05 #11
fandt ud af det med return....er måske lidt sent med java ;)
men bliv lige hængende...kommer snart med et spm. om ca. 5 min
Avatar billede simonvalter Praktikant
05. september 2003 - 22:19 #12
erikjacobsen > jep det ved jeg .. men jeg ville stadig ikke gøre det på den måde .. give hver elev deres Klassse.
Avatar billede simonvalter Praktikant
05. september 2003 - 22:22 #13
lidt kedeligt til klassefesten ;)
Avatar billede gladmhensk Nybegynder
05. september 2003 - 22:24 #14
i mår vente til imorgen :D

Kan ikke overskue det ligenu
Avatar billede simonvalter Praktikant
05. september 2003 - 22:30 #15
helt iorden
Avatar billede erikjacobsen Ekspert
05. september 2003 - 22:34 #16
Jeg læste nu "Klasse" som Java-klasse, og ikke som skole-klasse. Men det
er da bestemt ikke et særligt sigende navn ;)
Avatar billede simonvalter Praktikant
05. september 2003 - 22:46 #17
du kan vel stadig bruge den static int count på Elev klassen og få fat i den fra (skole)Klasse klassen , men jeg tror ikke det er det bedste at gøre .. for det må vel være Klasse klassen der skal vide hvor mange elever den har .. og får du retuneret count fra en anden klasse så kommer der en højere kobling imellem klasserne end nødvendig da size på vectoren kan gøre det samme.. eller tager jeg helt fejl?
Avatar billede erikjacobsen Ekspert
05. september 2003 - 23:04 #18
static int count er selvfølgelig kun det den giver sig ud for at være: en
tæller, der siger hvor mange objekter der er oprettet. Den kan ikke tælle
hvor mange af disse objekter, der fx hører til en bestemt skoleklasse.

I stedet for arrays, der er bøvlede hvis man ikke kender størrelsen på
forhånd, kan du overveje at bruge klassen Vector (eller ArrayList)
Avatar billede imperten Nybegynder
05. september 2003 - 23:52 #19
skoleklasse navn[][] = { { "Jens", "Poul", "Martin", "Mark", "Camilla" }
                        { "Anton", "Sofus", "Niels", "Henriette" }
                        { "Linda", "Frank", "Ludvig" }};
Avatar billede gladmhensk Nybegynder
06. september 2003 - 16:20 #20
Har leget lidt videre med det, og er kommet frem til at bruge Arraylist

Min SkoleKlasse.java

import java.util.*;

public class SkoleKlasse
{

public SkoleKlasse()
{

ArrayList list[] = new ArrayList[5];


Elev e1 = new Elev("Pia", "1");

list.add(e1);



}


public static void main(String[] argumenter)
{
    SkoleKlasse SkoleKlasse = new SkoleKlasse();
}
}



Min Elev.java

public class Elev
{

private String Navn;
private int Nummer;



public Elev(String Navn, int Nummer)
{
Navn = Navn;
Nummer = Nummer;

}






public int getNummer()
{

return Nummer;

}

public String getNavn()
{

return Navn;

}
}



Men hvorfor kan den ikke ADD mit objekt, som jeg skaber ?
Avatar billede arne_v Ekspert
06. september 2003 - 16:24 #21
Ikke:

ArrayList list[] = new ArrayList[5];

kun:

ArrayList list = new ArrayList();
Avatar billede arne_v Ekspert
06. september 2003 - 16:25 #22
Du vil ikke have 5 array lists men en array list som kan indeholde
mange elever.
Avatar billede gladmhensk Nybegynder
06. september 2003 - 16:26 #23
Fejlen:
Avatar billede gladmhensk Nybegynder
06. september 2003 - 16:27 #24
arne_v har prøvet med det en times tid, men kan ikke hitte ud af at lave et udtræk, så jeg kan se indholdet....
Avatar billede arne_v Ekspert
06. september 2003 - 16:29 #25
Tilføj det her til din Elev klasse:

public String toString() {
    return (Nummer + " " + Navn);
}

så kan du simpelthen bruge:

System.out.println(list);

i din SkoleKlasse klasse.
Avatar billede arne_v Ekspert
06. september 2003 - 16:31 #26
Hvis du yderligere tilføjer:

public toString() {
  return list.toString();
}

til din SkoleKlasse klasse, så kan du i main udskrive en sådan.
Avatar billede gladmhensk Nybegynder
06. september 2003 - 16:32 #27
[0 null, 0 null]
Tryk på en vilkårlig tast for at fortsætte . . .

Er alt hvad den skriver...
Avatar billede arne_v Ekspert
06. september 2003 - 16:35 #28
Ret din Elev constructor til:

public Elev(String Navn, int Nummer)
{
  this.Navn = Navn;
  this.Nummer = Nummer;
}
Avatar billede gladmhensk Nybegynder
06. september 2003 - 16:39 #29
Så virker det :)

[1, Pia, 2, Pia]

Den udskriver dataer'ne, men har du et fif til at sætte det pænt op, skal du nok få point :)
Avatar billede simonvalter Praktikant
06. september 2003 - 16:41 #30
du kan gøre sådan her..

public class SkoleKlasse
{

    ArrayList list;

public SkoleKlasse()
{
list = new ArrayList();
}
    public void addElev(Elev e){
    list.add(e);
    }

    public int antalElever(){
      return list.size();
    }

    public String toString(){
        return list.toString();
    }

    public static void main(String[] argumenter)
    {
        SkoleKlasse SkoleKlasse = new SkoleKlasse();
        Elev e1 = new Elev("Pia", 1);
        Elev e2 = new Elev("Per", 2);
        SkoleKlasse.addElev(e1);
        SkoleKlasse.addElev(e2);
        System.out.println("Der er "+SkoleKlasse.antalElever()+" i Klassen");
        System.out.println("Elever i Klassen "+SkoleKlasse);
    }
    }
Avatar billede arne_v Ekspert
06. september 2003 - 16:45 #31
Hvis du ikke kan lide [xxx,xxx,xxx] formen, så laver du en mere avanceret
toString i SkoleKlasse klassen (en for løkke der appender til en StringBuffer
of returnerer toString af den).
Avatar billede arne_v Ekspert
06. september 2003 - 16:46 #32
Jeg vil iøvrigt anbefale ikke at have samme navn for klasse og instans.
Avatar billede erikjacobsen Ekspert
06. september 2003 - 16:53 #33
SkoleKlasse skoleKlasse = new SkoleKlasse();

Det er bedre ;)
Avatar billede gladmhensk Nybegynder
06. september 2003 - 17:19 #34
ok...jeg håber, at jeg kan finde ud af resten...mener der står nåt om StringBuffer i Beginning Java 2 :)

Arne v lav et svar så dig og Loadet kan få point
Avatar billede simonvalter Praktikant
06. september 2003 - 17:21 #35
du kan vel gøre ala det her for at få printet eleverne uden []

public String printElever(){
        String s ="";
        for (int i= 0;i < list.size();i++){
            s += list.get(i)+" ";
        }
        return s;
    }
Avatar billede arne_v Ekspert
06. september 2003 - 17:27 #36
Med StringBuffer bliver det:

    public String toString(){
        StringBuffer sb = new StringBuffer("");
        for (int i = 0; i < list.size(); i++){
            if(i > 0) {
                ab.append(" ");
            }
            sb.append(list.get(i).toString());
        }
        return sb.toString();
    }

[tastet ind efter hovedet - check for tyrk-fejl]
Avatar billede arne_v Ekspert
06. september 2003 - 17:27 #37
svar
Avatar billede arne_v Ekspert
06. september 2003 - 17:27 #38
Erik skal vel også ligge et svar ??
Avatar billede gladmhensk Nybegynder
06. september 2003 - 17:28 #39
Jep, det ville være rart ;)
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