Toon posts:

[Java] array met objecten

Pagina: 1
Acties:
  • 230 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik heb een array van objecten, hier kan ik objecten insteken, als de array vol is wordt ze verdubbeld


er zitten 2 fouten in, maar kweet niet waaraan dit zou liggen

Verwijderd

Topicstarter
Ok, iets te snel doorgestuurd,

heir de fouten en de code

quote:
public class Stack
{

//instantievariabelen
private Object [] stack;
private int aantalElementen;
private final int beginGrootteArray=5;

//constructor methode
public Stack()
{
stack = new Object [beginGrootteArray];
aantalElementen=0;
}

//methode die een getal op de stack plaatst
public void push(Object element)
{
if (aantalElementen==stack.length)
this.verdubbelRij();
stack[aantalElementen]=element;
aantalElementen++;
}

//kijkt of de stack leeg is
public boolean isEmpty()
{
if (aantalElementen==0)
return true;
else return false;
}

//methode die een getal van de stack haalt en de plaats leegmaakt
public Object pop()
{
if (aantalElementen==0)
{
System.out.println("De stack is leeg");
return null;
}
else
{
return stack[aantalElementen-1];
stack[aantalElementen-1]=null;
aantalElementen--;
}
}

//dit is een methode die ervoor zorgt dat de array stack verdubbeld kan worden
private void verdubbelRij()
{
Object [] hulp = new Object [stack.length*2];
int i = 0;

while (i < stack.length)
{
hulp[i]=stack[i];
i++;
}

this.stack=hulp;
}

}//einde klasse



fouten:
Stack.java:44: unreachable statement
stack[aantalElementen-1]=null;
^
Stack.java:35: missing return statement
{
^
2 errors
Exit code: 1
There were errors

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
1. Gebruik alsjeblieft [ code] tags als je code post. Dat is een stuk duidelijker :) .

2. Geef aan waar bepaalde regels zich bevinden als een foutmelding regelnummers bevat.

In dit geval spreken de meldingen voor zich: unreachable statement betekent dat statements nooit bereikt kunnen worden. In dit geval wordt dat veroorzaakt door statements direct achter een return. Die worden natuurlijk nooit uitgevoerd.

De twee melding is ook logisch. Niet in alle gevallen is er een return statement voor een methode die wel een return type heeft.

Waarom implementeer je dit trouwens? Is het een opdracht? Zo nee -> de default implementatie ( java.util.Stack) doet het vast beter en bespaart een hoop tijd :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
1. Gebruik alsjeblieft [ code] tags als je code post. Dat is een stuk duidelijker
en gebruik idents / tabs !

zoals mbravenboer al zegt is dit erg basic. je moet gewoon ffkes naar de aangegeven regels gaan en een beetje nadenken ;)

Verwijderd

Topicstarter
Bedankt voord esnelle reactie,

tja, dit is dus wel een opdracht, we moeten dit zelf implementeren.

Bedankt,in ieder geval!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Heb die heerlijke beautifier maar weer eens aan het werk gezet ;) .
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
55
56
57
58
59
60
61
62
63
64
65
public class Stack
{

    //instantievariabelen
    private Object [] stack;
    private int aantalElementen;
    private final int beginGrootteArray = 5;

    //constructor methode
    public Stack()
    {
        stack = new Object [beginGrootteArray];
        aantalElementen = 0;
    }

    //methode die een getal op de stack plaatst
    public void push(Object element)
    {
        if (aantalElementen == stack.length)
            this.verdubbelRij();
        stack[aantalElementen] = element;
        aantalElementen++;
    }

    //kijkt of de stack leeg is
    public boolean isEmpty()
    {
        if (aantalElementen == 0)
            return true;
        else
            return false;
    }

    //methode die een getal van de stack haalt en de plaats leegmaakt
    public Object pop()
    {
        if (aantalElementen == 0)
        {
            System.out.println("De stack is leeg");
            return null;
        }
        else
        {
            return stack[aantalElementen - 1];
            stack[aantalElementen - 1] = null;
            aantalElementen--;
        }
    }

    //dit is een methode die ervoor zorgt dat de array stack verdubbeld kan worden
    private void verdubbelRij()
    {
        Object [] hulp = new Object [stack.length * 2];
        int i = 0;

        while (i < stack.length)
        {
            hulp[i] = stack[i];
            i++;
        }

        this.stack = hulp;
    }

}//einde klasse

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Noble_Paladin: tja, dit is dus wel een opdracht, we moeten dit zelf implementeren.
Hum das mooi prut ;) . Is er ook aangegeven dat je percee een array moet gebruiken? Je kan anders ook gewoon een List gebruiken als interne opslag. Is het een stuk makkelijk >:) . De standaard implementatie is ook een subklasse van een verzameling (wat ik overigens niet mooi vind).
Bedankt,in ieder geval!
Succes :) . Het moet zo wel lukken lijkt me :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
idd,

we moeten een array gebruiken, de leraar vond dat we te weinig gebruik maakten van arrays en veel te veel van Vectors

nu heb ik in mijn gedachten dat ik mits enkele aanpassingen viaverdubbelRij zelf ook wel een Vector-klasse zou kunnen maken, niet?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Noble_Paladin: we moeten een array gebruiken, de leraar vond dat we te weinig gebruik maakten van arrays en veel te veel van Vectors
Beetje onzin vind ik. Als je van te voren de verwachte grootte van een verzameling opgeeft, wordt er intern een array van die grootte aangemaakt. De Vector implementatie heeft dan vrijwel geen nadelen en erg veel voordelen zoals handige methoden, Iterator ondersteuning etc. Wel is het altijd handig om met een ArrayList te werken ipv een Vector. De Vector is namelijk synchronized (thread-safe), waardoor er wat performance verlies plaats vindt. De ArrayList heeft dit probleem niet.

Als je niet de te verwachten grootte opgeeft, ben je inderdaad niet erg handig bezig, want intern moet de array dan steeds uitgebreid worden en, zoals je zelf al ondervonden hebt, is dat veel werk.
nu heb ik in mijn gedachten dat ik mits enkele aanpassingen viaverdubbelRij zelf ook wel een Vector-klasse zou kunnen maken, niet?
Inderdaad, dat is zelfs veel mooier vanuit verschillende oogpunten:

1. Je dynamische-grote verzameling is duidelijker.
2. De Stack code is duidelijker.

Als je docent commentaar heeft op deze oplossing is hij erg dom bezig, want het heeft werkelijk (vrijwel) geen enkel nadeel. Je bewijst op deze manier kennis van arrays, de gevolgen van het gebruik van Collection classes en besef van hergebruik en duidelijkheid. Lijkt mij dus een extra punt zelfs ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

dit kan efficienter (en ik vind het mooier):
code:
1
2
3
4
5
6
// kijk of de stack leeg is
public boolean isEmpty()
{
    return aantalElementen == 0;
    // geeft zelf al true of false terug
}

en hier doe je weer aantalElementen == 0, voor de duidelijkheid zou je hier isEmpty() moeten gebruiken vind ik :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//methode die een getal van de stack haalt en de plaats leegmaakt
    public Object pop()
    {
        if (isEmpty())
        {
            System.out.println("De stack is leeg");
            return null;
        }
        else
        {
            return stack[aantalElementen - 1];
            stack[aantalElementen - 1] = null;
            aantalElementen--;
        }
    }

just my 2 cents ;)

  • Dieter
  • Registratie: Januari 2001
  • Laatst online: 20-07-2021
Noble palladin : :)

van wie heb je les ? >:)
Pagina: 1