Toon posts:

[JAVA]uitprinten matrix

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet een lesrooster aanmaken
Een lesrooster bestaat uit het studiejaar en een matrix van slots die kunnen gevuld worden met een vak

Ik heb hiervoor een toString-methode gemaak maar er zijn een aantal probleempjes:
1. Voor elke nieuwe rij van de matrix print hij "Null"
2. Hij print de vakken niet af, maar iets wat denk ik de plaats is waar hij dat vak in het geheugenheeft opgeslagen
bvb: Vak@310d42

dit zijn de codes:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Vak{
    private int code;
    private String vak;
    private int slots;

    public Vak(){}
    
    public Vak(int code, String vak, int slots){
        this.code = code;
        this.vak = vak;
        this.slots = slots;
    }

    public int geefCode (){
        return code;
    }
    public String geefVak(){
        return vak;
    }
    public int geefSlots(){
        return slots;
    }

    public void wijzigCode (int code){
        this.code = code;
    }
    public void wijzigVak (String vak){
        this.vak = vak;
    }
    public void wijzigSlots (int slots){
        this.slots = slots;
    }
    
    public boolean isGelijk(Vak v){
        boolean gelijkVak=false;
        if ((code == v.code) && (vak.equals(v.vak)) && (slots == v.slots)) gelijkVak = true;
        return gelijkVak;
    }   
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class LesRooster{
    private Vak [][]raster = new Vak[8][5];
    private String studiejaar;

    public LesRooster(){}

    public LesRooster(String studiejaar){       
        for (int i=0; i<8; i++){
            for (int e=0; e<5; e++){            
                raster[i][e] = new Vak (0,"onbezet",0);
            }
        }
        this.studiejaar = studiejaar;
    }

    public void vulSlotIn(int dag, int slot, Vak v){
        if (raster[slot-1][dag-1]==new Vak(0,"onbezet",0)) System.out.println("Slot is reeds bezet!");
            else raster[slot-1][dag-1] = v;     
    }

    public void wijzigSlot(int dag, int slot, Vak v){
        if (raster[slot-1][dag-1]==new Vak(0,"onbezet",0)) System.out.println("Slot nog niet ingevuld!");
            else raster[slot-1][dag-1] = v;
    }
    
    public void verwijderSlot(int dag, int slot){
        if (raster[slot-1][dag-1]==new Vak(0,"onbezet",0)) System.out.println("Slot is al leeg!");
            else raster[slot-1][dag-1] = new Vak (0,"onbezet",0);
    }   

    /*public Vak[][] geefAlleVakken(){
        Vak []rijVakken = new Vak[40];
        for (int i=0; i<8; i++){
            for (int e=0; i<5; e++){
                for (int k=0; k<40; k++){
                    rijVakken[k]=raster[i][e];
                }
            }
        }
        return rijVakken;
    }*/

    public String toString(){
        String[] deel = new String[8];
        String totaal = "";
        for (int i=0; i<8; i++){
            for (int e=0; e<5; e++){        
                deel[i] +=(raster[i][e]+"\t");
            }
            totaal +=(deel[i]+"\n");
        }
        return totaal;
    }
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.*;

public class Rooster {

    public static void main(String[] args) throws Exception {
        System.out.println("LESROOSTER.");
        System.out.println("Naam : <VUL HIER JE NAAM IN>");
        Vak algebra=new Vak(1020,"Algebra",4);
        Vak analyse=new Vak(920,"Analyse",6);
        Vak scheikunde=new Vak(870,"Scheikunde",3);
        Vak ict=new Vak(950,"ICT",3);
        LesRooster l=new LesRooster("1ste kandidatuur");
        l.vulSlotIn(1,1,algebra);
        l.vulSlotIn(1,2,ict);
        l.vulSlotIn(1,3,scheikunde);
        l.vulSlotIn(2,1,scheikunde);
        l.vulSlotIn(2,2,analyse);
        l.vulSlotIn(3,1,analyse);
        l.vulSlotIn(3,2,algebra);
        l.vulSlotIn(3,3,analyse);
        l.vulSlotIn(4,1,ict);
        l.vulSlotIn(4,2,analyse);
        l.vulSlotIn(4,3,scheikunde);
        l.vulSlotIn(5,1,algebra);
        l.vulSlotIn(5,2,ict);
        l.vulSlotIn(5,3,analyse);
        l.vulSlotIn(5,4,analyse);
        l.vulSlotIn(2,3,algebra);
        System.out.println(l);
        // l.isConsistent();
    }
}

Wie zou zo vriendelijk willen zijn mij te helpen :) ?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
deel[i] +=(raster[i][e]+"\t");

maak daar van
code:
1
deel[i] +=(raster[i][e].geefVak() + "\t");\

dan zou het volgens mij moeten werken.

Verwijderd

Topicstarter
Nu geeft hij zoiets, ondanks de tabs; en nog steeds die null:
code:
1
2
3
4
5
6
7
8
9
10
LESROOSTER.
Naam : <VUL HIER JE NAAM IN>
nullAlgebra     Scheikunde  Analyse ICT     Algebra
nullICT Analyse Algebra Analyse ICT
nullScheikunde  Algebra Analyse Scheikunde  Analyse
nullonbezet     onbezet onbezet onbezet Analyse
nullonbezet     onbezet onbezet onbezet onbezet
nullonbezet     onbezet onbezet onbezet onbezet
nullonbezet     onbezet onbezet onbezet onbezet
nullonbezet     onbezet onbezet onbezet onbezet

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
[edit]oh nee, foutje :)

  • momania
  • Registratie: Mei 2000
  • Laatst online: 11:40

momania

iPhone 30! Bam!

Wat je eventueel kan doen is een panel maken met de
"nullScheikunde Algebra Analyse Scheikunde Analyse"

gegevens, waarbij je voor elk veld weer een labeltje maakt met een vaste breedte.
Daarna kan je voor elke regel dus zo'n object aanmaken en die aan een main panel toevoegen. Dan kun je het volgens mij aardig uitgelijnd krijgen..

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Je moet in de klasse Vak ook effe een toString maken waarbij je bijvoorbeeld het vak teruggeeft. Als je zelf geen toString maakt zie je dus inderdaad van die adres achtige dingen.

Verder zag ik een bug, in method verwijderSlot van klasse LesRooster (en nog een paar andere methoden) controleer je telkens of het object gelijk is aan 'new Vak(0,"onbezet",0)'. met de == operator vergelijk je echter geheugen adressen en aangezien de rechterkant een gloednieuw object is zal hier altijd false uitkomen. Wat je waarschijnlijk wilt doen is je isGelijk methode gebruiken.

De fout zit volgens mij in je toString methode van LesRooster. Hier maak je namelijk eerst een array van strings aan maar de iedere string afzonderlijk initializeer je niet. Probeer dus eens deel[i]=""; op de juiste plek in te voegen....

Verwijderd

Topicstarter
Yep, nu werkt het, thx.

Alleen werkt hij die tabs nog niet goed uit.

Nu ga ik nog de methodes geefAlleVaken en isConsistent proberen goed te krijgen.
Kzal het wel vragen als dat niet lukt maar eerst zelf zoeken eh (lees prutsen :) )

en een zalige kerst voor iedereen btw :)

Verwijderd

Topicstarter
Hallo,
ik heb een paar dingetjes aangepast
Bij een leeg slot heb ik er gewoon voor gezorgd dat dat er geen nieuw vak wordt aangemaakt (waar dat vroeger 0,onbezet,0 was). Hierdoor print hij nu gewoon "null" uit als de slot onbezet is.
Als ik mijn methode isGelijk (om te controleren of 2 vakken dezelfde zijn) hierop wil loslaten geeft hij nu een nullPointerException.
Hoe kan ik dit oplossen?

Als opgave voor de methode isGelijk staat er dit:
Een methode isGelijk(Vak v) , die aangeeft of het this-object een zelfde Vak betreft als het Vak v.

en dit is mijn methode:
code:
1
2
3
4
5
public boolean isGelijk(Vak v){
        boolean gelijkVak=false;
        if ((code == v.code) && (vak.equals(v.vak)) && (slots == v.slots)) gelijkVak = true;
        return gelijkVak;
    }

is dit dan juist?

Dank bij voorbaat voor deze waarschijnlijk stomme vraag

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
is wel juist ja, maar kan korter :) :
code:
1
2
3
4
5
public boolean isGelijk(Vak v)
{
    return (code == v.code) && (vak.equals(v.vak) && 
      (slots == v.slots);
}

Verwijderd

Topicstarter
Bij de methode geefAlleVakken moet hij alle vakken van het lesrooster afgaan en alle verschillende vakken in een lijst steken; maar elk vak slechts 1 keer.
Ik dacht dat als de methode isGelijk(Vak v) false geeft, hij dan dat vak tot mijn lijst zou toevoegen, maar toch doet hij dit niet? En ksnap niet waarom :)
code:
1
2
3
4
5
6
7
8
9
10
public Vector geefAlleVakken(){
        Vector lijstVakken = new Vector();
        for (int i=0; i<8; i++){
            for (int e=0; e<5; e++){
                if (((raster[i][e]).isGelijk(raster[i][e])) == false){
                    lijstVakken.addElement(raster[i][e]);
                }               
            }
        }
        return lijstVakken;


code:
1
2
3
public boolean isGelijk(Vak v){
    return (code == v.code) && (vak.equals(v.vak) && (slots == v.slots);
}

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
if (raster[i][e]).isGelijk(raster[i][e]))

dat geeft natuurlijk nooit false.
Pagina: 1