Toon posts:

[java] array syntax

Pagina: 1
Acties:

Verwijderd

Topicstarter
sorry voor de n00b vraag maar ik snap echt niet wat ik verkeerd doe:
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.*;
import java.lang.*;

public class MyFuzzyCtrl
    {
    double total = 0.0;
    int i = 0;

    double[] action = new Double[4];
    MemberFcnTriangular[] membership = new MemberFcnTriangular[4];

    membership[0].initLeft(20,24);
    membership[0].Setlabel("Okay");
    membership[1].initSharp(20,24,28);
    membership[1].Setlabel("Little Hot");
    membership[2].initSharp(24,28.32);
    membership[2].Setlabel("Hot");
    membership[3].initRight(28,32);
    membership[3].Setlabel("Very Hot");

    action[0] = 0;
    action[1] = 20;
    action[2] = 50;
    action[3] = 100;

    public double GetTakagiOutput(x)
        {for (int i = 0; memberships.size(); i++)
            {total += (action[i] * membership[i].evaluate());}
        return total;
        }

    }

oke ik wil dus heel simpel van alle MemberFcnTriangular objecten in de membership array de evaluate functie uitvoeren en dit vermenigvuldigen met de getallen uit de action array, en dan het totaal berekenen.

ik krijg bij het compilen bij iedere array line deze error:
code:
1
2
3
4
5
C:\Documents and Settings\s030463\My Documents\Fuzzy Control\MyFuzzyCtrl.java:12: ']' expected
    membership[0].initLeft(20,24);
                   ^
C:\Documents and Settings\s030463\My Documents\Fuzzy Control\MyFuzzyCtrl.java:12: <identifier> expected
    membership[0].initLeft(20,24);


wat doe ik fout??

[ Voor 3% gewijzigd door Verwijderd op 29-05-2004 14:04 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Wat sowieso fout is dat jij een array hebt gereserveerd voor 4 objecten, maar deze 4 objecten zijn nog niet aangemaakt!
En jij maakt een array aan van doubles, en Doubles:
double[] action = new Double[4];

[ Voor 32% gewijzigd door Alarmnummer op 29-05-2004 14:08 ]


Verwijderd

Topicstarter
Alarmnummer schreef op 29 mei 2004 @ 14:06:
Wat sowieso fout is dat jij een array hebt gereserveerd voor 4 objecten, maar deze 4 objecten zijn nog niet aangemaakt!
En jij maakt een array aan van doubles, en Doubles:
double[] action = new Double[4];
huh... ik moet toch eerst de array aanmaken en dan de objecten invullen?
hoe moet ik het dan doen?

Verwijderd

Je vergeet de code in de public static void main te stoppen. Je stopt nu code rechtstreeks in de klasse dat kan niet. Ik zou daarom het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
membership[0].initLeft(20,24);
    membership[0].Setlabel("Okay");
    membership[1].initSharp(20,24,28);
    membership[1].Setlabel("Little Hot");
    membership[2].initSharp(24,28.32);
    membership[2].Setlabel("Hot");
    membership[3].initRight(28,32);
    membership[3].Setlabel("Very Hot");

    action[0] = 0;
    action[1] = 20;
    action[2] = 50;
    action[3] = 100;

vervangen door
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
    membership[0].initLeft(20,24);
    membership[0].Setlabel("Okay");
    membership[1].initSharp(20,24,28);
    membership[1].Setlabel("Little Hot");
    membership[2].initSharp(24,28.32);
    membership[2].Setlabel("Hot");
    membership[3].initRight(28,32);
    membership[3].Setlabel("Very Hot");

    action[0] = 0;
    action[1] = 20;
    action[2] = 50;
    action[3] = 100;
}


Daarnaast zitten er in de code nog een aantal fouten.
Ten eerste,
code:
1
double[] action = new Double[4];

Dit moet
code:
1
double[] action = new double[4];

zijn. Ten tweede maakt de volgende regel slechts een array van references aan
code:
1
MemberFcnTriangular[] membership = new MemberFcnTriangular[4];

je moet er daarna nog objecten in stoppen. Bijvoorbeeld zo:
code:
1
2
3
for(int i = 0; i < 4; i++) {
   membership[i] = new MemberFcnTriangular();
}

[ Voor 4% gewijzigd door Verwijderd op 29-05-2004 14:11 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 29 mei 2004 @ 14:10:
Je vergeet de code in de public static void main te stoppen.
Dat was idd 'de' fout :z

Verwijderd

Alarmnummer schreef op 29 mei 2004 @ 14:12:
[...]

Dat was idd 'de' fout :z
Het duurde ook even voor ik het zag ;)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 29 mei 2004 @ 14:15:
[...]
Het duurde ook even voor ik het zag ;)
Ik vond die functie in de code al zo raar ;)

Verwijderd

Topicstarter
bedankt alvast voor de hulp :)
maar ik snap het nog niet helemaal...
Verwijderd schreef op 29 mei 2004 @ 14:10:
Ten tweede maakt de volgende regel slechts een array van references aan
code:
1
MemberFcnTriangular[] membership = new MemberFcnTriangular[4];

je moet er daarna nog objecten in stoppen. Bijvoorbeeld zo:
code:
1
2
3
for(int i = 0; i < 4; i++) {
   membership[i] = new MemberFcnTriangular();
}
dus als ik een MemberFcnTriangular[] array aanmaak, worden daar niet vanzelf MemberFcnTriangular objecten in gestopt?
En waarom is die bijnadezelfde lijn waarin ik een double array aanmaak dan wel goed?

  • LittleWan
  • Registratie: Februari 2003
  • Laatst online: 13-03 18:21
Verwijderd schreef op 29 mei 2004 @ 14:10:
Je vergeet de code in de public static void main te stoppen.
dat hoeft toch niet persé zo te zijn, je kan het toch ook in de default cunstructor plaatsen. Of in een custructor die je later aanroept...

http://www.sillevl.be - blog http://www.sillevl.be/blog - flickr http://www.flickr.com/sillevl


Verwijderd

Verwijderd schreef op 29 mei 2004 @ 14:45:
bedankt alvast voor de hulp :)
maar ik snap het nog niet helemaal...

[...]

dus als ik een MemberFcnTriangular[] array aanmaak, worden daar niet vanzelf MemberFcnTriangular objecten in gestopt?
Nee, dat klopt.
En waarom is die bijnadezelfde lijn waarin ik een double array aanmaak dan wel goed?
Java kent primitieven en objecten. int, char, double, byte en float zijn voorbeelden van primitieven (deze hebben typenamen met alleen kleine letters). Primitieven kun je niet zien als objecten en ook niet zo benaderen (int b = 6; b.toString() kan bijvoorbeeld niet). Als je een assignment doet met primitieven wordt de waarde gekopieerd.
Als je een variabele declareerd met een klasse als type (String bijvoorbeeld of MemberFcnTriangular) is dat in feite te vergelijken met een doos met daarin een briefje waar je de daadwerkelijke waarde kunt vinden (een referentie, reference). Als je een assignment doet met object variabelen wordt alleen de referentie (verwijzing) gekopieerd, niet de waarde.

Verwijderd

LittleWan schreef op 29 mei 2004 @ 14:49:
[...]


dat hoeft toch niet persé zo te zijn, je kan het toch ook in de default cunstructor plaatsen. Of in een custructor die je later aanroept...
Dat klopt, maar ik gokte dat public static void main de bedoeling zou zijn. Ik bedenk me net dat de code in een constructor stoppen een betere oplossing is, anders krijg je gedonder met al-dan-niet statische methoden en variabelen.

Plaats de eerder genoemde code dus lievere in een constructor:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public MyFuzzyCtrl() {
    membership[0].initLeft(20,24);
    membership[0].Setlabel("Okay");
    membership[1].initSharp(20,24,28);
    membership[1].Setlabel("Little Hot");
    membership[2].initSharp(24,28.32);
    membership[2].Setlabel("Hot");
    membership[3].initRight(28,32);
    membership[3].Setlabel("Very Hot");

    action[0] = 0;
    action[1] = 20;
    action[2] = 50;
    action[3] = 100;
}
// En maak dan apart een public static void main aan mocht je de class direct aan willen roepen:
public static void main(String[] args) {
   new MyFuzzyCtrl();
}

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

Macros

I'm watching...

Alles is nu wel gefixt, maar ik heb een ander vraagje.
Waarom zijn deze dingen hetzelfde:
Java:
1
2
3
4
5
double[] nummers = new double[2];
double nummers[] = new double[2];

public static void main(String[] args);
public static void main(String args[]);


Veel mensen raken daarvan in de war.
Persoonlijk zet ik het liever achter het type en niet bij de naam van de variable.

Bij 2D arrays of meer kan het helemaal vaag worden.
Java:
1
2
3
double [] een [] = new double[5][5];
double twee [][] = een;
double [][] drie = twee;

Nu heb je 3 verschillende manieren om een 2d array te definen.

[ Voor 23% gewijzigd door Macros op 29-05-2004 16:15 ]

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


Verwijderd

Macros schreef op 29 mei 2004 @ 16:11:
Alles is nu wel gefixt, maar ik heb een ander vraagje.
Waarom zijn deze dingen hetzelfde:
Java:
1
2
3
4
5
double[] nummers = new double[2];
double nummers[] = new double[2];

public static void main(String[] args);
public static void main(String args[]);


Veel mensen raken daarvan in de war.
Persoonlijk zet ik het liever achter het type en niet bij de naam van de variable.

Bij 2D arrays of meer kan het helemaal vaag worden.
Java:
1
2
3
double [] een [] = new double[5][5];
double twee [][] = een;
double [][] drie = twee;

Nu heb je 3 verschillende manieren om een 2d array te definen.
Op deze manier is het ook mogelijk om in een declaraties zowel arrays als normale variabelen te declareren:
Java:
1
double array[], a, b; // array is een array, a en b zijn gewone doubles

Zelf gebruik ik ook liever de haken bij het type. In C# is het zetten van de haken achter de variabele niet eens meer mogelijk.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 29 mei 2004 @ 16:42:
[...]

Op deze manier is het ook mogelijk om in een declaraties zowel arrays als normale variabelen te declareren:
Java:
1
double array[], a, b; // array is een array, a en b zijn gewone doubles

Zelf gebruik ik ook liever de haken bij het type. In C# is het zetten van de haken achter de variabele niet eens meer mogelijk.
Hmm.. nog een argument om maar 1 var declaratie per regel af te dwingen ;)

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

Macros

I'm watching...

Verwijderd schreef op 29 mei 2004 @ 16:42:
[...]

Op deze manier is het ook mogelijk om in een declaraties zowel arrays als normale variabelen te declareren:
Java:
1
double array[], a, b; // array is een array, a en b zijn gewone doubles

Zelf gebruik ik ook liever de haken bij het type. In C# is het zetten van de haken achter de variabele niet eens meer mogelijk.
Maar als je doet:
Java:
1
double [] a, b;

Zijn a en b dan arrays of alleen a?

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


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

a en b, want het type is een double[]. In het voorbeeld van Zelf is het type een double

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Alarmnummer schreef op 29 mei 2004 @ 17:03:
Hmm.. nog een argument om maar 1 var declaratie per regel af te dwingen ;)
Ik vind meer dan 1 sowieso onduidelijk, heb nog nooit meer dan 1 variabele gedeclareerd op een regel. Persoonlijk ben ik voor de C# oplossing, voorkom verwarring als het niet nodig is.
Pagina: 1