Gegeven onderstaande code, leidt tot twee foutmeldingen. Wat gaat er mis? Verbeter de implementatie:

public int initVoorbeeld(ArrayList<String> lijst) {
   int n, m;
   if (lijst.get(0).equals("")) {
      n = 0;
   }
   for (String s : lijst) {
      m = s.length();
   }
return n + m;
}

  • Als de eerste keuzeopdracht niet wordt uitgevoerd, omdat de expressie op false resulteert wordt n nooit gedeclareerd, maar wel in de enkelvoudige return opdracht gebruikt. Dit is niet toegestaan! Een tweede fout is dat als de lijst object geen elementen bevat de for-each herhalingsopdracht nooit wordt uitgevoerd. De variabele m van het primitieve type int wordt dan niet geïnitialiseerd, maar wel in de return opdracht gebruikt. Dit mag dus ook niet! Hieronder een aantal verschillende oplossingen.

    Oplossing 1
    De variabelen n en m worden gelijkertijd gedeclareerd en geïnitialiseerd.

    public int initVoorbeeld(ArrayList<String> lijst) {
       int n = 1, m = 0;
       if (lijst.get(0).equals("")) {
          n = 0;
       }
       for (String s : lijst) {
          m = s.length();
       }
    return n + m;
    }

    Oplossing 2
    Als de eerste keuzeopdracht in false resulteert wordt n alsnog geinitialseerd d.m.v. de else blok. Als de lijst nog niet geïnitialiseerd is of geen elementen bevat krijgt de variabele m alsnog een beginwaarde toegekend.

    public int initVoorbeeld(ArrayList<String> lijst) {
       int n, m;
       if (lijst.get(0).equals("")) {
          n = 0;
       } else {
          n = 1;
       }

       if(lijst == null || lijst.lengt() == 0) {
       m = 0;
       }
       for (String s : lijst) {
          m = s.length();
       }
    return n + m;
    }

    Rapporteer Plaats commentaar