Simple Apex class to return a list of strings

  • I'm writing a simple Apex class as part of the new Salesforce Trailhead developer course. Here's what I'm trying to do:

    Create an Apex class that returns an array (or list) of formatted strings ('Test 0', 'Test 1', ...). The length of the array is determined by an integer parameter.

    • The Apex class must be called 'StringArrayTest' and be in the public scope.
    • The Apex class must have a public static method called 'generateStringArray'.
    • The 'generateStringArray' method must return an array (or list) of strings. Each string must have a value in the format 'Test n' where n is the index of the current string in the array. The number of returned strings is specified by the integer parameter to the 'generateStringArray' method.

    Here is my code:

    public class StringArrayTest {
    
        //Public Method
        public static void generateStringArray(Integer length) {
    
            //Instantiate the list
            String[] myArray = new List<String>(length);
    
            //Iterate throught the list
            for(Integer i=0;i<myArray.size();i++) {
    
                //Populate the array
                myArray.add(myArray[i]);
    
                // Write value to the debug log
                System.debug(myArray[i]);
    
            } //end loop
    
        }//end method       
     }// end class
    

    I'm sure it's something very simple I'm doing wrong. When I execute right now it's returning:

    expecting a semi-colon, found ''

    when you write a method that must return something(in your case a list of strings), you do not make it `void`. Change it to `String[]` or `List`

  • You can't instantiate a List like that using an integer. You don't need to explicitly specify how much items are going into the list when it is created. Instead, just remove the integer:

    //Instantiate the list
    String[] myArray = new List<String>();
    

    You're logic in your loop seems to be incorrect as well. Specifically, myArray's size will always be 0 when you instantiate it. Change your loop logic to:

    for(Integer i=0;i<length;i++) {
       // code
    }
    

    You want to generate a List of strings based on the i variable. You will want to change your internal logic to:

    //Populate the array
    myArray.add('Test ' + i);
    
    // Write value to the debug log
    System.debug(myArray[i]);
    

    Finally, you want to return that Array. You need to change your method so the return type is no longer void by changing its signature:

    public static String[] generateStringArray(Integer length)
    

    then it is just a matter of returning that array at the end of your method:

    return myArray;
    

    This would bring it all together as:

    public class StringArrayTest {
        //Public Method
        public static String[] generateStringArray(Integer length) {
            //Instantiate the list
            String[] myArray = new List<String>();
    
            //Iterate throught the list
            for(Integer i=0;i<length;i++) {
                //Populate the array
                myArray.add('Test ' + i);
    
                // Write value to the debug log
                System.debug(myArray[i]);
            } //end loop
    
            return myArray;
        }//end method       
    }// end class
    

    Some more info on Arrays and Lists, Loops, and Class methods for future reference.

    Right. But his loop would then end immediately as there's not much to loop over. I think the core of the class needs some basic rethinking

    Yep, good call @FrankZ. I realized that after I posted it. I solved the first problem, but that immediately led to another.

    Just like I forgot to return a List of Strings - and not just me :-)

    I just stumbled across this on the active list, and I noticed that this answer is slightly incorrect. You *can* specify the number of initial elements, which has a very minor performance benefit. The correct syntax uses the square brackets (`new String[length];`). This reduces the number of heap allocations that occur, which can improve performance.

License under CC-BY-SA with attribution


Content dated before 7/24/2021 11:53 AM

Tags used