Avatar billede madiedk Nybegynder
03. november 2004 - 11:59 Der er 37 kommentarer og
1 løsning

opbygning af opgave?

Hej
jeg skal lave et program, der fra start oprettet 20 studerende, der hver har en status for hver enkelt opgave de har lavet (godkendt, ikke godkendt og ikke afleveret) for 21 opgaver. I programmet skal man kunne ændre status for de forskellige opgaver og kunne vise hvor mange der har afleveret f.eks opgave 13 og kunne gå ind på en studerende og se status for alle opgaver for vedkommende(de studerende skal kunne identificeres gemmen deres Cpr nummer.

ps. brugergrænsefladen er en textbaseret menu i terminalvinduet, som jeg har lavet, jeg har haft java i 2 måneder, så mit kendskab er ikke helt vildt, men nogenlunde.

spørgsmål: hvordan skal jeg oprette de studernede med deres tilhørende opgaver? skal jeg bruge array (2d array, eller måske 3d array), arraylist, hashmap, eller hvordan skal jeg bygge det op?
Avatar billede arne_v Ekspert
03. november 2004 - 14:08 #1
Jeg er ikke sikker på at jeg helt forstår opgaven men måske noget a la:
  en klasse Studerende
  20 instanser af Studerende fra start
  en ArrayList med alle Studerende
  Studerende indeholder et array med 20 elementer med status

Det kan godt laves smartere, men det det her må være en simpel løsning.
Avatar billede madiedk Nybegynder
03. november 2004 - 14:26 #2
hmm.... er ikke helt sikker på jeg forstår det kan du måske gi nogle eksempler. er det overhoved nødvendigt at bruge arraylist jeg ved jo hvor mange studerende der er og skal ikke kunne tilføje flere, så er det ikke smartest at bruge array i stedet for.
Avatar billede kalp Novice
03. november 2004 - 14:34 #3
Du kan bare lave en enkelt arraylist som holder styr på opgaver... og en enkelt arraylist som holder styr på studerende...

I den arraylist som holder styr på opgaverne kan fx være en arraylist af typen int[]
dvs... så kan et 1tal fx betyde godkendt, 2tal ikke godkendt, 3tal ikke afleveret.

via. en lykke kan du tælle hvor mange 1 taller der er hvis du vil have et print af hvor mange godkendte der er osv
Avatar billede kalp Novice
03. november 2004 - 14:35 #4
en klasse til studerende og hvis du vil en klasse til opgaverne...

og så en klasse med main i...
Avatar billede kalp Novice
03. november 2004 - 14:37 #5
array for opgaver skal være 2d.. nu det er 21 forskellige oggaver
Avatar billede arne_v Ekspert
03. november 2004 - 14:38 #6
Jeg ville helt klart bruge ArrayList til studerende. Det kan altså
ikke være så fast en størrelse.

Antal opgaver derimod har jeg antaget er absolut fast.
Avatar billede arne_v Ekspert
03. november 2004 - 14:39 #7
Du kan jo gå igang med at lave en klasse Studerende og en main klasse. Når
du så kører fast kan du poste problemet her.
Avatar billede madiedk Nybegynder
03. november 2004 - 14:48 #8
jeg har ikke lært om main klasser endnu, så jeg tror ikke laver laver en main, så vidt jeg ved er main hvis det er en applikation ellers er det en applet? og vi skal vidst lave en applet.
jeg har en klasse der hedder opgaver og studerende og menu. i klassen studerende opretter jeg alle de studerende i et array og i klassen opgaver opretter jeg opgaverne i et array, men hvordan? hvis opgaverne skal laves i et 2d array og hvorfor i et 2d? hvordan gør jeg det? nogle der kan gi et eksempel? hvis man har en studerende der hedder IB og en opgave der hedder datalogiU1 og den er godkendt?
Avatar billede arne_v Ekspert
03. november 2004 - 14:52 #9
Hvis det skal være en applet, så skal det naturligvis være en applet klasse
og ikke en main klasse.

Jeg kan heller ikke se pointen i et 2D array.

Og jeg mener bestemt at du skal have en klasse Studerende hvor en instansm som
indeholder en enkelt studerende.

Så skal en anden klasse have alle instanserne af Studerende enten i et almindeligt
array eller i en ArrayList.
Avatar billede arne_v Ekspert
03. november 2004 - 14:55 #10
Hvis opgaverne er på navn og ikke fortløbende nummerret, så skal det array med 20
elementer udskiftes med en HashMap som mapper fra opgavenavn til status.

Hvis du vil være fri for at lade en løkke løbe ArrayList (eller array) med
studerend eigennem kunne du også putte dem i en HashMap som mapper fra
navn til Studerende objekt.
Avatar billede madiedk Nybegynder
03. november 2004 - 16:07 #11
hvordan putter jeg instanderne ind i et array? altså hvordan istedet for at eks. skrive String[] eller int[] hvad skal jeg skrive?
Avatar billede arne_v Ekspert
03. november 2004 - 16:08 #12
simpelt eksempel:

X alle = new X[3];
alle[0] = new X();
alle[1] = new X();
alle[2] = new X();
Avatar billede madiedk Nybegynder
03. november 2004 - 22:56 #13
nu har jeg putter instanserne af studerende i et array i en 3. klasse, det ser sådan her ud:

"""public void putStuIArray()
{
alle[0] = new Studerende("ib", 3104811965);
alle[1] = new Studerende("bo", 2104792987);
}"""

hvad så med opgaverne, opretter jeg dem som instanser af klassen opgaver og putter også dem ind i et array i den 3. klasse eller hvad gør jeg?
Avatar billede arne_v Ekspert
03. november 2004 - 23:08 #14
F.eks. ja (jeg kan ikke helt gennemskue dine klasser men det kunne godt være
løsningen - det kunne også være at opgaverne skulle ligges ind i de studerende - det
afhænger af opgaven og dit design)
Avatar billede madiedk Nybegynder
03. november 2004 - 23:22 #15
jeg har en 3 klasser: Studerende, Opgaver og Menu
i Studerende har jeg 2 felter (navn og cpr)
i Opgaver har jeg 3 felter (fag, identifikation, status)
i Menu har jeg den menu jeg har laver og her putter jeg instanserne af Studerende ind i et Array og instanserne af Opgaver ind i et andet Array.

i klassen Studerende har jeg 2 parameter i konstroktoren, et hvor man skriver navner og et hvor man skriver cpr nummeret.

i klassen Opgaver har jeg 3 parameter i konstroktoren, et hvor man skriver faget et hvor man skriver hvilken opgave der er tale om og et hvor man skriver status på opgaven.

er det rigtigt det jeg har gjort nu? hvis ja hvordan får jeg det så til at spille sammen, hvis du forstår hvad jeg mener?

ps. er utrolig glad for du (arne v) gider at hjælpe mig.
Avatar billede arne_v Ekspert
03. november 2004 - 23:31 #16
Jeg tror at du mangler et eller andet i Studerende som henviser til Opgave.

Måske en HashMap med Opgave som key og status som value.
Avatar billede madiedk Nybegynder
03. november 2004 - 23:33 #17
ja jeg tænkte også på at jeg manglede noget i Studerende, jeg prøver at kigge på det i morgen,
tak for hjælpen.
ps. håber du er online i morgen, jeg har nok nogle flere spørgsmål, hvis du altså har tid og lyst.
Avatar billede madiedk Nybegynder
04. november 2004 - 13:38 #18
jeg er gået lidt i stå, i klassen Studerende skal jeg da lave et eller andet der oprettet et objekt at klassen Opgaver hver gang der bliver lavet en studerende eller hvad? og hvis ja hvordan tilføje jeg så alle 21 opgaver til en studerende og den tilhørende status (husk: status skal kunne ændre sig som det eneste.)
Avatar billede madiedk Nybegynder
04. november 2004 - 13:43 #19
eller skal jeg lave 21 felter i klassen studerende med hver deres opgave identifikation eller hvordan?
Avatar billede arne_v Ekspert
04. november 2004 - 13:46 #20
Umiddelbart synes jeg at det lyder mest fornuftigt kun at have 21 Opgave objekter
totalt men at have 21 x antal Studerende opgave status.
Avatar billede arne_v Ekspert
04. november 2004 - 13:48 #21
Så noget i Studerende klassen som holder styr på status.

Hvis opgaver var identificeret med et nummer kunne status bare være
et int array med 21 elementer.

Men når opgaver er objekter, så var en HashMap med f.eks. opgave navn som
key og status som value nok bedre.
Avatar billede madiedk Nybegynder
04. november 2004 - 14:00 #22
kan godt se lidt hvad du mener, skal jeg så lave 23 felter i Studerende klassen, et med cpr et med navn og 21 med opgaverne hvor hver felt er et object af klassen opgaver?
Avatar billede madiedk Nybegynder
04. november 2004 - 14:19 #23
eller skal jeg lave et array i Studerende klassen der indeholder 21 objekter af klassen Opgaver?
Avatar billede madiedk Nybegynder
04. november 2004 - 14:37 #24
skal jeg hashmap i Studerende klassen? har svært ved at overskue det, hvordan gør jeg det
Avatar billede arne_v Ekspert
04. november 2004 - 16:19 #25
Med den begrænsede info jeg har lyder det som en god løsning
Avatar billede madiedk Nybegynder
04. november 2004 - 16:39 #26
nu har jeg lavet ´klassen studerende således:
public class Studerende
{

    public String navn;
    public int cpr;
    public Opgaver[] opg;


 
   
   
    public Studerende(String navn, int cpr)
    {
      opg = new Opgaver[21];
      this.navn = navn;
      this.cpr = cpr;

      tilføjOpgaver();
    }

public void tilføjOpgaver()
{
opg[0] = new Opgaver("dat", "u1");
opg[1] = new Opgaver("dat", "u2");
opg[2] = new Opgaver("dat", "u3");
opg[3] = new Opgaver("dat", "u4");
opg[4] = new Opgaver("dat", "u5");
opg[5] = new Opgaver("dat", "u6");
opg[6] = new Opgaver("dat", "u7");
opg[7] = new Opgaver("dat", "u8");
opg[8] = new Opgaver("dat", "g1");
opg[9] = new Opgaver("dat", "g2");
opg[10] = new Opgaver("eø", "u1");
opg[11] = new Opgaver("eø", "u2");
opg[12] = new Opgaver("eø", "u3");
opg[13] = new Opgaver("org", "u1");
opg[14] = new Opgaver("org", "u2");
opg[15] = new Opgaver("org", "u3");
opg[16] = new Opgaver("org", "u4");
opg[17] = new Opgaver("sam", "u1");
opg[18] = new Opgaver("sam", "u2");
opg[19] = new Opgaver("sam", "u3");
opg[20] = new Opgaver("sam", "u4");

    }


    }


klassen opgaver ser således ud:

public class Opgaver
{

    public String fag;
    public String id;



   
     
    public Opgaver(String fag, String identifikation)
    {
    id = identifikation;

    this.fag = fag;
   
    }
 

}

og så samler jeg det hele i en 3 klasse, der hedder Listeafstuderende hvor jeg putter hvert objekt af klassen studerende ind i et array der ser således ud:
public void putStuIArray()
{
allestu[0] = new Studerende("ib", 1);
allestu[1] = new Studerende("bo", 2);
allestu[2] = new Studerende("Eva", 3);
allestu[3] = new Studerende("Hans", 4);
allestu[4] = new Studerende("Per", 5);


}

hvad synes du om alt det her?
hvis det virker rigtigt, så er mit problem bare nu hvordan jeg tilføjer en status til hvert enkelt opgave nu.

som det er nu, så hver gang der bliver oprettet ét objekt af klassen Studerende så opretter den 21 objekter af klassen Opgaver, jeg mangler bare at få tilføjet en status til hvert enkelt opgave.
Avatar billede arne_v Ekspert
04. november 2004 - 18:29 #27
Du skal ikke gemme opgaverne under den studerende kun opgave status.
Avatar billede madiedk Nybegynder
06. november 2004 - 15:22 #28
vil det sige jeg i Opgave klassen kun skal lave 2 felter, fag og identifikation og i Studernede klassen skal lave 3 felter, cpr, navn og status? men hvordan får jeg status for alle 21 opgaver ind i status felt, skal jeg lave status feltet til et array? og skal jeg så i den 3. klasse oprette 21 objekter fra klassen studerende, hvis det er måden at gøre det på, så har jeg bare lidt svært ved at lave så hver studerende for 21 status'er.
i den 3 klasse skal jeg vel oprette alle 20 studerende hvor jeg skriver deres navn og cpr som parameter, men jeg skal jo så også fortælle hvad deres status for hvert enkelt opgave er hvordan gør jeg det?
Avatar billede arne_v Ekspert
06. november 2004 - 15:37 #29
Du kan indetificere opgaverne med et nummer og så lave status til et simpelt
array.

Eller du kan gemms status i en HashMap med Opgave som key.
Avatar billede madiedk Nybegynder
06. november 2004 - 18:14 #30
hvad for en klasse skal jeg så lave hashmap i?
men skal jeg oprette alle de 20 studernede i den 3. klasse med navn og cpr som parameter. og deres status for hvert enkelt opgave har jeg stadigvæk lidt svært ved at forstå tror jeg
Avatar billede madiedk Nybegynder
06. november 2004 - 19:40 #31
nu har jeg  i klassen studerende lavet så når man opretten en studerende skal jeg skrive navn og cpr som parameter og så oprettet den automatisk 21 objekter af klassen opgaver med hver deres id og fag her er et lille eks.
public void tilføjOpgaver()
{
opg[0] = new Opgaver("dat", "u1");
opg[1] = new Opgaver("dat", "u2");

i den 3. klasse "Listeafstuderende" har jeg så samlet de studerende således:

public void opretStuderende()
{
allestu[0] = new Studerende("ib", 1);
allestu[1] = new Studerende("bo", 2);
    } 

hvis det er rigtigt det jeg har gjort? så mangler jeg at tilføje en status til hvert enkelt opgave for hver studerende det vil altså sige 20 studerende * 21 opgavestatus hvor i programmet skal jeg gøre det og hvordan kan jeg gøre det?
Avatar billede arne_v Ekspert
07. november 2004 - 00:16 #32
Et komplet eksempel til inspiration:

import java.util.*;

public class Studie {
    private final static int N = 4;
    private final static int MAT1 = 0;
    private final static int MAT2 = 1;
    private final static int STAT1 = 2;
    private final static int STAT2 = 3;
   
    private HashMap studerende = new HashMap();
    private Opgave[] opgaver = new Opgave[N];
   
    public void addStuderende(String cpr, String navn) {
        studerende.put(cpr, new Studerende(cpr, navn, N));
    }
   
    public void addOpgave(int ix, String titel, String fag) {
        opgaver[ix] = new Opgave(titel, fag);
    }
   
    public void printStuderende(String cpr) {
        Studerende stud = (Studerende)studerende.get(cpr);
        System.out.println(stud);
        for(int i = 0; i < N; i++) {
            System.out.println("  " + opgaver[i] + " : " + (stud.getOpgaver(i) ? "bestået" : "ikke bestået"));
        }
    }
   
    public void printOpgave(int ix) {
        System.out.println(opgaver[ix]);
        Iterator it = studerende.keySet().iterator();
        while(it.hasNext()) {
            String cpr = (String)it.next();
            Studerende stud = (Studerende)studerende.get(cpr);
            if(stud.getOpgaver(ix)) {
                System.out.println("  " + stud);
            }
        }
    }
   
    public void eksamen(int ix, String navn, boolean result) {
        Studerende stud = (Studerende)studerende.get(navn);
        stud.setOpgaver(ix, result);
    }
   
    public static void main(String[] args) {
        Studie s = new Studie();
        s.addStuderende("123456-1234", "Anders Andersen");
        s.addStuderende("111111-1111", "Børge Børgesen");
        s.addStuderende("999999-9999", "Claus Clausen");
        s.addOpgave(MAT1, "#1", "Matematik");
        s.addOpgave(MAT2, "#2", "Matematik");
        s.addOpgave(STAT1, "#1", "Statistik");
        s.addOpgave(STAT2, "#2", "Statistik");
        s.eksamen(MAT1, "123456-1234", true);
        s.eksamen(MAT1, "111111-1111", true);
        s.eksamen(MAT1, "999999-9999", false);
        s.printStuderende("111111-1111");
        s.printOpgave(MAT1);
    }
}

class Studerende {
    private String cpr;
    private String navn;
    private boolean[] opgaver;

    public Studerende(String cpr, String navn, int antal) {
        this.cpr = cpr;
        this.navn = navn;
        opgaver = new boolean[antal];
        for(int i = 0; i < antal; i++) {
            opgaver[i] = false;
        }
    }
   
    public String getCpr() {
        return cpr;
    }

    public void setCpr(String cpr) {
        this.cpr = cpr;
    }

    public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }
   
    public boolean getOpgaver(int ix) {
        return opgaver[ix];
    }
   
    public void setOpgaver(int ix, boolean val) {
        opgaver[ix] = val;
    }
   
    public String toString() {
        return (navn + "(" + cpr + ")");
    }
}

class Opgave {
    private String titel;
    private String fag;

    public Opgave(String titel, String fag) {
        this.titel = titel;
        this.fag = fag;
    }

    public String getTitel() {
        return titel;
    }

    public void setTitel(String titel) {
        this.titel = titel;
    }
   
    public String getFag() {
        return fag;
    }

    public void setFag(String fag) {
        this.fag = fag;
    }
   
    public String toString() {
        return (titel + "/" + fag);
    }
}
Avatar billede Martin Hansen Nybegynder
07. november 2004 - 21:26 #33
Husk at anføre eksperten som kilde til hjælp af løsningen med en opgave - hygge
Avatar billede madiedk Nybegynder
07. november 2004 - 21:59 #34
til splosh:
selvfølgelig
Avatar billede arne_v Ekspert
07. november 2004 - 22:18 #35
jeg vil ligge et svar nu
Avatar billede madiedk Nybegynder
07. november 2004 - 23:46 #36
så vil jeg sige mange tak for den tid du har brugt på at hjælpe mig.
Avatar billede f_rollo Nybegynder
10. november 2004 - 18:19 #37
Hey madiedk

tænkte på hvordan du har fået den til at kunne skelne imellem godkendt, ikke godkendt og ikke afleveret og hvordan du registrerer opgaverne. Metoden i eksemplet herover giver jo umiddelbart en ret "langsommelig" måde at registrerer på/ kræver meget indtastning.
Skriv evt til mig på diver@pc.dk
Avatar billede madiedk Nybegynder
10. november 2004 - 18:25 #38
jeg har heller ikke brugt den overståen løsning, men fandt min egen.
skal du også afleverer opgaven på fredag? kommer du fra DØK studiet
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