Archief - JAVA (BlueJ) Identifier expected

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Pudmeister

Legacy Member
Hallo allemaal,

BlueJ geeft een error bij de volgende code:

public class Datum
{
private int dag;
private int maand;
private int jaar;

private static String[] maanden;
maanden = new String[12];
}

Wanneer ik private static String[] maanden = new String[12]; gebruik werkt het wel, maar dit moet toch ook op 2 verschillende lijnen gaan? Stel dat ge met een integervariabele de lengte van de array wilt instellen, moet ge toch maanden = new String[ingegevenaantal]; kunnen uitvoeren.

In Ecplise werkt dit stukje code wel maar niet in BlueJ...

Edit: nog een pittig detail:
Wanneer ik in Eclipse
String[] maanden;
maanden = new String[12];

zet in de klasse datum komt er ook een fout (Syntax error on token ";", , expected), maar wanneer ik exact dezelfde code in de mainfunctie zet, komt deze foutmelding er niet :wtf:

Tyfius

Legacy Member
Je kan dat op die manier alleen maar initialiseren als dat via een functie of je constructor gebeurd. Niet halverwege je klasse definitie.

Het is dus ofwel:
Code:
public class Datum {
  private static String[] maanden = new String[12]
}
of
Code:
public class Datum {
  private static String[] maanden;

  // Hier de constructor, maar dat kan ook via een functie.
  public Datum() {
    maanden = new String[12];
  }
}

forloRn_

Legacy Member
Protip: een klassedefinitie is geen functie en omgekeerd dus je kunt er niet hetzelfde mee doen.

Protip 2: als je gebruik maakt van een static initializer block kan je het wel opsplitsen:
Code:
private static String[] maanden;

static {
    maanden = new String[12];
}

Pudmeister

Legacy Member
Je hebt gelijk, 't werkt enkel vanuit een functie of meteen initialisatie bij declaratie. Dat hadden ze mij niet verteld in de les... Daar hadden we dit enkel getest in een mainfunctie, daar kan je wel waarden toekennen waar ge maar wilt, maar in een klassedefinitie gaat dat precies niet overal.... Bedankt!

(Sorry voor de noob-vraag, maar 'k had op voorhand de errors gegoogeld, stukken code uitgeprobeerd,... zonderdat ik zag wat precies het probleem was)

*Fmc*

Legacy Member
Met een array van 11 kom je trouwens ook al toe om alle maanden in een array te zetten.
Een array begint te tellen vanaf 0 en niet vanaf 1 ;)

forloRn_

Legacy Member
*Fmc* zei:
Met een array van 11 kom je trouwens ook al toe om alle maanden in een array te zetten.
Een array begint te tellen vanaf 0 en niet vanaf 1 ;)

Ja vriend, maar er zitten wel 12 elementen in. new String[12] is juist.

Pudmeister

Legacy Member
Ja, wanneer ge

Code:
String[] maanden = new String[12];

gebruikt, wordt er een array gemaakt waar ge 12 strings in kunt zetten, dus van index 0 tot 11. Bij de initialisatie geeft ge het aantal elementen (12) mee, niet de hoogste index (11).

*Fmc*

Legacy Member
Ow ja, even verward. Mijn excuses >.<

Nu schaam ik me ff heel diep :p
Ge zou niet zeggen dat ik al twee jaar met Java bezig ben xD
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan