Toon posts:

Java methode's beginners vraag.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik draai WinXP en Java. schrijf de applets met BlueJ

Ik ben bezig met een oefenproject van school.
En nee ik probeer niet anderen mijn werk te laten maken.
Dit is slechts om te oefenen. Het enige probleem is dat ik er niet uitkom hoe ik een bepaalde methode implementeer.

Ik heb de volgende code geschreven :


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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Opdracht_1a extends Applet {
   private final int teller = 3;
   private TextField[] vak;
   private int[] vakinh;
   TextField inzet_vak, saldo_vak;
   int fruitsoort, inzet, saldo;
   Button start_knop;
   Label inzet_label, saldo_label;
       
    public void init() {
        saldo = 50;
        
        setLayout( null );
        start_knop = new Button( "start" );
        start_knop.addActionListener( new start_knopHandler() );
        inzet_vak = new TextField( 12 );
        saldo_vak = new TextField( 12 );
        
        start_knop.setBounds( 200, 50, 90, 20 );
        inzet_vak.setBounds( 200, 25, 90, 20 );
        saldo_vak.setBounds( 100, 150, 90, 20 );
        
        saldo_vak.setText( "" + saldo );
        
        inzet_label = new Label( "Wat is uw inzet?" );
        saldo_label = new Label( "Saldo" );
        
        inzet_label.setBounds( 200, 5, 90, 20 );
        saldo_label.setBounds( 100, 125, 90, 20 );
        
        add( inzet_vak );
        add( saldo_vak );
        add( inzet_label );
        add( saldo_label );
        add( start_knop );
        
        vak = new TextField[ teller + 1];
        vakinh = new int[ 3 ];

        int yPos = 100;
        for( int i = 0; i < teller; i++ ) {
            vak[ i ] = new TextField( 12 );
            vak[ i ].setBounds( yPos, 80, 90, 20 );
            yPos = yPos + 100;
            add( vak[ i ] );
        }  
    }
    
    /// Methode treknummer deze retourneerd een getal van 1 tot en met 3.
    int trekNummer() {
        return (int) (int) ( 3 * Math.random() + 1 );
    }
    /// Methode fruitsoort
    fruitSoort() {
            switch( fruitsoort ) {
                case 1: vak[ i ].setText( "Peer" );
                break;
                case 2: vak[ i ].setText( "Appel" );
                break;
                case 3: vak[ i ].setText( "Kers" );
                break;
            }
    }
    
    
    
    class start_knopHandler implements ActionListener {
        public void actionPerformed( ActionEvent e ){
          for( int i = 0; i < teller; i++ ) {
            int fruitsoort = trekNummer();
            /// Hier roep ik de methode trekNummer op
            vakinh[ i ] =  fruitsoort;
            fruitSoort();
            /// Hier roep ik de methode fruitsoort op
        }
        inzet=Integer.parseInt(inzet_vak.getText());
        saldo = saldo - inzet;
        saldo_vak.setText( "" + saldo );
        if( vakinh[ 0 ] == vakinh[ 1 ] & vakinh[ 1 ] == vakinh[ 2 ]) {
             inzet = inzet * 10;
             saldo = saldo + inzet;
             saldo_vak.setText( "" + saldo );
        }
        else if( vakinh[ 0 ] == 3 ) {
             saldo = saldo + inzet;
             saldo_vak.setText( "" + saldo );
        } 
        }
    }
}


Nu geeft hij aan bij :


code:
1
2
3
4
5
6
7
8
9
10
fruitSoort() {
            switch( fruitsoort ) {
                case 1: vak[ i ].setText( "Peer" );
                break;
                case 2: vak[ i ].setText( "Appel" );
                break;
                case 3: vak[ i ].setText( "Kers" );
                break;
            }
    }


Dat het een foutive methode declaratie is.
Voor wat ik nu gevonden heb is dat ik dus aan moet geven wat het retourneerd.
Bijv : parseInt of int of String maar geen van deze drie werkt.

int werkt niet lijkt mij omdat het niet zuiver uit een int bestaat. De methode trekNummer die werkt wel. (en nee niet te ver doordenken ik heb gewoon de richtlijnen van de oefenopgave nageleefd.)

String werkt ook niet lijkt mij omdat er ook integers in voorkomen.

parseInt lijkt mij wel te moeten werken omdat er twee type variabelen in voorkomen vak[ i ] en fruitsoort

Echter dit werkt niet.

Nu is mijn vraag kan iemand mij misschien een klein beetje op weg helpen en zeggen hoe ik deze methode wel declareer en aanroep?

P.S nogmaals dit is niet zo'n post van dit is mijn huiswerk en laat het maar even oplossen door anderen. Ik heb al meerdere gesloten posts gezien waarvan dat de sluitingsreden was. Deze post is dat dus beslist niet. Krijg hier ook geen cijfer voor oid. Het is louter om te oefenen. Maar aangezien ik nu een aantal dagen al thuis zit ivm en een dag vrij en daaraangekoppeld een rapportvergadering van de betreffende docenten en ik er na een flinke tijd het internet afsurfen er nog steeds niet achter ben wat ik nou fout doe vraag ik het hier.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
void fruitSoort() {

?

void kun je opgeven als je functie/methode/operatie/procedure geen waarde returned, wat in fruitSoort inderdaad het geval is. Het lijkt me daarom een goede optie om deze void te maken. Als je wel een waarde returned, moet je het datatype van de funtie gelijk maken aan wat je terug keert.

parseInt is overigens een javascript functie en geen Java datatype (dacht ik in ieder geval)

[ Voor 122% gewijzigd door Michali op 17-11-2004 17:04 ]

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
Cewl dat werkt.
Nu heb ik nog een volgende foutmelding maar die ga ik eerst zelf proberen op te lossen.

Heel erg bedankt.

Verwijderd

Topicstarter
Goed volgend probleem waar ik dus niet uitkom :

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Opdracht_1a extends Applet {
   private final int teller = 3;
   private TextField[] vak;
   private int[] vakinh;
   TextField inzet_vak, saldo_vak;
   int fruitsoort, inzet, saldo;
   Button start_knop;
   Label inzet_label, saldo_label;
   string inzet;
       
    public void init() {
        saldo = 50;
        
        setLayout( null );
        start_knop = new Button( "start" );
        start_knop.addActionListener( new start_knopHandler() );
        inzet_vak = new TextField( 12 );
        saldo_vak = new TextField( 12 );
        
        start_knop.setBounds( 200, 50, 90, 20 );
        inzet_vak.setBounds( 200, 25, 90, 20 );
        saldo_vak.setBounds( 100, 150, 90, 20 );
        
        saldo_vak.setText( "" + saldo );
        
        inzet_label = new Label( "Wat is uw inzet?" );
        saldo_label = new Label( "Saldo" );
        
        inzet_label.setBounds( 200, 5, 90, 20 );
        saldo_label.setBounds( 100, 125, 90, 20 );
        
        add( inzet_vak );
        add( saldo_vak );
        add( inzet_label );
        add( saldo_label );
        add( start_knop );
        
        vak = new TextField[ teller + 1];
        vakinh = new int[ 3 ];

        int yPos = 100;
        for( int i = 0; i < teller; i++ ) {
            vak[ i ] = new TextField( 12 );
            vak[ i ].setBounds( yPos, 80, 90, 20 );
            yPos = yPos + 100;
            add( vak[ i ] );
        }  
    }
    
    /// Methode treknummer deze retourneerd een getal van 1 tot en met 3.
    int trekNummer() {
        return (int) (int) ( 3 * Math.random() + 1 );
    }
    /// Methode fruitsoort
    void fruitSoort() {
            for( int i = 0; i < teller; i++ ) {
                int fruitsoort = trekNummer();
                /// Hier roep ik de methode trekNummer op
                vakinh[ i ] =  fruitsoort;
                switch( fruitsoort ) {
                    case 1: vak[ i ].setText( "Peer" );
                    break;
                    case 2: vak[ i ].setText( "Appel" );
                    break;
                    case 3: vak[ i ].setText( "Kers" );
                    break;
                }
            }
    }
    
    
    
    class start_knopHandler implements ActionListener {
        public void actionPerformed( ActionEvent e ){
            fruitSoort();
            /// Hier roep ik de methode fruitsoort op
        }
        Integer inzet = Integer.parseInt(inzet_vak.getText());
        saldo = saldo - inzet;
        saldo_vak.setText( "" + saldo );
        if( vakinh[ 0 ] == vakinh[ 1 ] & vakinh[ 1 ] == vakinh[ 2 ]) {
             inzet = inzet * 10;
             saldo = saldo + inzet;
             saldo_vak.setText( "" + saldo );
        }
        else if( vakinh[ 0 ] == 3 ) {
             saldo = saldo + inzet;
             saldo_vak.setText( "" + saldo );
        } 
        }
    }
}


Als ik de bovenstaande code wil compilen geeft hij de foutmelding dat een identifier wordt verwacht.
En dat is dus saldo.
Wat mij alleen verbaast is dat ik die al gedeclareerd heb bovenaan.
Namelijk :

code:
1
int fruitsoort, inzet, saldo;


maar alsnog vraagt hij om een identifier.
Terwijl ik die dus wel gedeclareerd heb.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik zie dat je een inner class gebruik oid? Ik ben niet echt bekend met Java, maar ik zie wel dat je vanuit die inner class een veld van de outer probeerd te accessen. Ik weet niet zeker hoe dit moet maar mischien is het iets van parent::saldo of iets dergelijks? Ik zal even zoeken.

Dit vorige stukje klopt niet trouwens. Ik heb net meer gelezen en blijkt dat je ze gewoon direct kunt bereiken. Wat fout gaat is dat je het stukje code probeert uit te voeren op een plaats waar dit niet mag. Je kunt in de class body alleen velden en methodes defineren. Je probeert saldo = saldo - inzet; uit te voeren waar hij over valt. Voor dit soort dingen en meer initialisatie code is de constructor uitgevonden. Maak daarvoor een functie zonder scope (public/private etc) en zonder return waarde met dezelfde naam als de class zelf. Als je hierin dit soort regels plaatst moet het wel goed gaan.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class start_knopHandler implements ActionListener {
        public void actionPerformed( ActionEvent e ){
            fruitSoort();
            /// Hier roep ik de methode fruitsoort op
        }
        Integer inzet = Integer.parseInt(inzet_vak.getText());
        saldo = saldo - inzet;
        saldo_vak.setText( "" + saldo );
        if( vakinh[ 0 ] == vakinh[ 1 ] & vakinh[ 1 ] == vakinh[ 2 ]) {
             inzet = inzet * 10;
             saldo = saldo + inzet;
             saldo_vak.setText( "" + saldo );
        }
        else if( vakinh[ 0 ] == 3 ) {
             saldo = saldo + inzet;
             saldo_vak.setText( "" + saldo );
        } 
        }
    }


=>

Java:
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
class start_knopHandler implements ActionListener
{
    Integer inzet = Integer.parseInt(inzet_vak.getText());
    
    public void actionPerformed( ActionEvent e )
    {
        fruitSoort();
        /// Hier roep ik de methode fruitsoort op
    }
    
    start_knopHandler()
    {
        saldo = saldo - inzet;
        saldo_vak.setText("" + saldo );

        if( vakinh[ 0 ] == vakinh[ 1 ] & vakinh[ 1 ] == vakinh[ 2 ])
        {
            inzet = inzet * 10;
            saldo = saldo + inzet;
            saldo_vak.setText("" + saldo );
        }
        else if( vakinh[ 0 ] == 3 )
        {
            saldo = saldo + inzet;
            saldo_vak.setText("" + saldo );
        }
    }
}

[ Voor 96% gewijzigd door Michali op 17-11-2004 17:45 ]

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
private bedoelt u?

int fruitsoort, inzet, saldo;

saldo heb ik gewoon default gedeclareerd.

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Michali schreef op woensdag 17 november 2004 @ 17:00:
parseInt is overigens een javascript functie en geen Java datatype (dacht ik in ieder geval)
parseInt is een int static method van classe Integer (parseInt != datatype dus). Niets aan het handje dus.
Wat betreft topicstarter, wat een rare switchcase gebruik je, je switched op fruitsoort, maar deze is lokaal nergens gedefinieerd laat staan als instantievariabele.

[ Voor 3% gewijzigd door prototype op 17-11-2004 17:45 ]


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 19-05 16:06
Beter is om de class Opdracht_1a de actionListener te laten implementeren zodat je geen outer class hoeft aan te maken.

  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 19-05 12:56
Verwijderd schreef op woensdag 17 november 2004 @ 17:30:
Als ik de bovenstaande code wil compilen geeft hij de foutmelding dat een identifier wordt verwacht.
En dat is dus saldo.
Wat mij alleen verbaast is dat ik die al gedeclareerd heb bovenaan..
Ik zou als ik jou was een goede IDE (b.v. eclipse), dat voorkomt veel van dit soort fouten. Dit soort programma's wijzen je vaak tijdens het typen van de code al op fouten, zodat je daar dus later niet tijdens het compilen pas achter komt.
Scheelt een hoop zoekwerk en ergenis!

[ Voor 7% gewijzigd door RSchellhorn op 17-11-2004 17:53 ]

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


Verwijderd

Slayer08 schreef op woensdag 17 november 2004 @ 17:51:
Ik zou als ik jou was een goede IDE (b.v. eclipse), dat voorkomt veel van dit soort fouten. Dit soort programma's wijzen je vaak tijdens het typen van de code al op fouten, zodat je daar dus later niet tijdens het compilen pas achter komt.
Scheelt een hoop zoekwerk en ergenis!
Sommige scholen en universiteiten (bijv. Rdam) zijn het daarmee oneens. BlueJ schijnt te horen bij een boek. Ik zie absoluut niet in wat het voordeel daarvan is. Misschien dat de topic starter dat eens aan zijn of haar docent kan vragen?

Verwijderd

Topicstarter
Slayer08 schreef op woensdag 17 november 2004 @ 17:51:
[...]


Ik zou als ik jou was een goede IDE (b.v. eclipse), dat voorkomt veel van dit soort fouten. Dit soort programma's wijzen je vaak tijdens het typen van de code al op fouten, zodat je daar dus later niet tijdens het compilen pas achter komt.
Scheelt een hoop zoekwerk en ergenis!
welke compilers zijn er nog meer te downloaden?

Want ik krijg eclipse helaas niet aan de praat.
(geeft de melding dat hij de java installatie niet kan vinden terwijl die er wel opstaat :S.

Ik heb trouwens ook netbeans geprobeerd als Java compiler echter geef ik die niet de voorkeur.

  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Ik vind het best een lastige opdracht voor een beginner.

Uit je code is ook te zijn dat je de basisprincipes nog niet goed begrijpt. Dit is niet erg, iedereen is begonnen zonder die kennis.

Misschien heb je meer aan een online tutorial (in vind die van Sun zelf erg duidelijk), of een andere methode?

Wat ik zelf fin vind werken is JCreator icm de java compiler van Sun

  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 19-05 12:56
Verwijderd schreef op woensdag 17 november 2004 @ 18:58:
[...]
welke compilers zijn er nog meer te downloaden?
Ik bedoelde niet dat je je compiler moet vervangen (ook al zou Eclipse dat ook kunnen). Het handige van dit soort programma's is, dat hij je tijdens het typen op fouten wijst:

Afbeeldingslocatie: http://home.mjdsl.nl/~wolfschellhorn/error.jpg

Daarnaast bevat het nog tig andere functies die je leven als programmeur makkelijker maken. :)

Als je jdk (bijvoorkeur laatste versie) via de standaard installer hebt geinstalleerd, zal eclipse deze zelf vinden, zo niet mag je gewoon de folder aanwijzen. Bovendien heeft eclipse eigenlijk alleen de jre (runtime enviroment) nodig.

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 19-05 12:56
Verwijderd schreef op woensdag 17 november 2004 @ 18:21:
[...]
Sommige scholen en universiteiten (bijv. Rdam) zijn het daarmee oneens.
Als ik mag vragen, waar zijn ze het mee oneens? Om hulpprogramma's te gebruiken? Afgezien van een sleur en pleur omgeving (tijdens het leren programmeren), zie ik niet in waarom je geen hulpje mag gebruiken.
Wat is hun redenatie?

Op de TU Delft is sinds een jaartje Eclipse de omgeving voor de java practica in ieder geval. Wordt ook door meerdere docenten gepromote kan ik wel zeggen :)

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


Verwijderd

Slayer08 schreef op woensdag 17 november 2004 @ 20:02:
Als ik mag vragen, waar zijn ze het mee oneens?
Geen idee. :?

Trouwens, in een van je vorige posts kreeg ik even het idee dat je het verschil niet zag tussen een IDE en een compiler, maar ik neem aan dat dat nu duidelijk is?

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Slayer08 schreef op woensdag 17 november 2004 @ 19:48:
[...]


Ik bedoelde niet dat je je compiler moet vervangen (ook al zou Eclipse dat ook kunnen). Het handige van dit soort programma's is, dat hij je tijdens het typen op fouten wijst:

[afbeelding]

Daarnaast bevat het nog tig andere functies die je leven als programmeur makkelijker maken. :)

Als je jdk (bijvoorkeur laatste versie) via de standaard installer hebt geinstalleerd, zal eclipse deze zelf vinden, zo niet mag je gewoon de folder aanwijzen. Bovendien heeft eclipse eigenlijk alleen de jre (runtime enviroment) nodig.
Ondersteund eclipse nou eindelijk eens generics ? :\
(of kent iemand een plugin ervoor die dat wel doet?)

Owja, en wat je zegt kan dan misschien wel kloppen mbt makkelijker etc... maar als beginner is het juist volgens mij belangrijk dat je te maken krijgt met zulke 'uitputtende' errors, daar leer je immers van. Op UTwente begon men met UltraEdit, en moest men alles via commandline compilen en 'k denk dat dat vooral daarmee te maken heeft dus (dat je ervan leert) ipv meteen een IDE te gebruiken (die je meteen vertelt wat en waar fout is).

[ Voor 24% gewijzigd door prototype op 17-11-2004 22:04 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Eclipse ondersteund de Generics van Java 1.5, de andere mogelijkheden volgens mij nog niet sinds de laatste keer dat ik heb gekeken (maandje geleden).

Als je problemen hebt is het meestal makkelijker om direct de compiler errors te copy pasten in plaats van de error te vertalen. Dat vind ik tenminste.

"Beauty is the ultimate defence against complexity." David Gelernter


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 19-05 12:56
Verwijderd schreef op woensdag 17 november 2004 @ 20:46:
[...]
Trouwens, in een van je vorige posts kreeg ik even het idee dat je het verschil niet zag tussen een IDE en een compiler, maar ik neem aan dat dat nu duidelijk is?
Als dat op mijn opmerking gericht was om een goede IDE te gaan gebruiken, weet ik niet waar die verwarring vandaan komt. :?
Bovendien heeft Eclipse natuurlijk ook zelf een ingebouwde compiler.
prototype schreef op woensdag 17 november 2004 @ 22:00:
[...]
Ondersteund eclipse nou eindelijk eens generics ? :\
Er wordt hard aan Eclipse 3.1 gewerkt, die volledig support biedt voor java 1.5. Voorlopig zijn ze bij M3 (soort van beta versie 3), deze heeft zeer redelijke support voor java 1.5, maar nog niet volledig.
Met deze versie is al zeer redelijk te werken in java 1.5. Generics, de nieuwe for-lus en enums werken al goed! (voor de geinteresseerden)
Versie 3.1 staat ergens begin tweede kwartaal van 2005 geplanned.


Is de TS trouwens al uit z'n probleem? Want de laatste paar posts waren niet geheel on-topic... :+

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)

Pagina: 1