Did you move the 'head' of the snake before the 'for' loop?
   
   
            import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
 * Write a description of class Playground here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Playground extends World
{
    Snake[] snakeBody;
    String segment;
    int direction;
    private int speed;
    private int speedX;
    private int speedY;
    boolean eaten;
    /**
     * Constructor for objects of class Playground.
     * 
     */
    public Playground()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(600, 400, 1); 
        direction = 0;
        eaten = false;
        speed = 2;
        speedX = speed;
        speedY = 0;
        snakeBody = new Snake[3]; // initialization of the Snake
        for(int i=0; i<snakeBody.length; i++)
        {
            snakeBody[i] = new Snake();
            addObject(snakeBody[i], 90+(snakeBody.length-i)*15, 30); // adding snake actor to the world
        }
    }
    public void checkKey()
    {
        if(Greenfoot.isKeyDown("right")) // checks if right key is pressed
        {
            if(direction==1 || direction==3)
            { direction = 0;
                speedX = speed;
                speedY = 0;
            }
        }
        else if(Greenfoot.isKeyDown("down")) // checks if down key is pressed
        {
            if(direction==0 || direction==2)
            {direction = 1;
                speedX = 0;
                speedY = speed;
            }
        }
        else if(Greenfoot.isKeyDown("left")) // checks if left key is pressed
        {
            if(direction==1 || direction==3)
            {direction = 2;
                speedX = -speed;
                speedY = 0;
            }
        }
        else if(Greenfoot.isKeyDown("up")) // checks if up key is pressed
        {
            if(direction==0 || direction==2)
            { direction = 3;
                speedX = 0;
                speedY = -speed;
            }
        }
    }
    public void moveIt()
    {
        int previousLocationX = snakeBody[0].getX();
        int previousLocationY = snakeBody[0].getY();
        snakeBody[0].setLocation(snakeBody[0].getX()+speedX, snakeBody[0].getY()+speedY);
        if(snakeBody[0].getX()!=previousLocationX || snakeBody[0].getY()!=previousLocationY)
        {
            for(int i=1; i<snakeBody.length; i++)
            {
               int holdX = snakeBody[i].getX();
               int holdY = snakeBody[i].getY();
               
               snakeBody[i].setLocation(previousLocationX, previousLocationY);
               previousLocationX = holdX; 
               previousLocationY = holdY; 
            }
        }
    }   
    /**
     * This method will update the length of the Snake.
     */
    private void growSnake(int x, int y)
    {
        Snake s = new Snake();
        Snake oldSnake[] = new Snake[snakeBody.length];
        for(int i=0; i<snakeBody.length; i++)
        {
            oldSnake[i] = snakeBody[i];
        }
        snakeBody = new Snake[snakeBody.length+1];
        for(int i=0; i<snakeBody.length-1; i++)
        {
            snakeBody[i] = oldSnake[i];
        }
        snakeBody[snakeBody.length-1] = s;       
        addObject(snakeBody[snakeBody.length-1], x, y); // adds new snake body actor
    }
    public void act()
    {
        checkKey();
        moveIt();
    }
}private void moveIt()
{
    // save the location of the 'head' segment (segment in front)
    // these are the 'goto' values for the next segment
    int prevX = snakeBody[0].getX();
    int prevY = snakeBody[0].getY();
    // get the direction of movement for the 'head' along horizontal and vertical (0, 1, or -1)
    int dx = (1 - direction) * ((direction + 1)%2);
    int dy = (2 - direction) * (direction%2);
    // get tentative new coordinates for the 'head'
    int newX = prevX + speed * dx;
    int newY = prevY + speed * dy;
    // if  'head' cannot move, exit method
    if (newX < 0 || newX > getWidth() - 1) return;
    if (newY < 0 || newY > getHeight() - 1) return;
    // move head
    snakeBody[0].setLocation(newX, newY);
    // move body segments of snake
    for (int i = 1; i < snakeBody.length(); i++)
    {
        // hold segments location
        int holdX = snakeBody[i].getX();
        int holdY = snakeBody[i].getY();
        // move segment
        snakeBody[i].setLocation(prevX, prevY);
        // set 'goto' values for next segment
        prevX = holdX;
        prevY = holdY;
    }
}import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
 * Write a description of class Playground here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Playground extends World
{
    Snake[] snakeBody;
    String segment;
    Food food;
    Counter score;
    private int direction;
    private int speed;
    private int speedX;
    private int speedY;
    private boolean eaten;
    /**
     * Constructor for objects of class Playground.
     * 
     */
    public Playground()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(600, 400, 1); 
        direction = 0;
        eaten = false;
        speed = 20;
        speedX = speed;
        speedY = 0;
        snakeBody = new Snake[3]; // initialization of the Snake
        for(int i=0; i<snakeBody.length; i++)
        {
            snakeBody[i] = new Snake();
            addObject(snakeBody[i], 90+(snakeBody.length-i)*15, 30); // adding snake actor to the world
        }
        score = new Counter("Score : "); // initialization of the score
        addObject(score, 19*15, 8); // adding score actor to the world
    }
    public void checkKey()
    {
        if(Greenfoot.isKeyDown("right")) // checks if right key is pressed
        {
            if(direction==1 || direction==3)
            { direction = 0;
                speedX = speed;
                speedY = 0;
            }
        }
        else if(Greenfoot.isKeyDown("down")) // checks if down key is pressed
        {
            if(direction==0 || direction==2)
            {direction = 1;
                speedX = 0;
                speedY = speed;
            }
        }
        else if(Greenfoot.isKeyDown("left")) // checks if left key is pressed
        {
            if(direction==1 || direction==3)
            {direction = 2;
                speedX = -speed;
                speedY = 0;
            }
        }
        else if(Greenfoot.isKeyDown("up")) // checks if up key is pressed
        {
            if(direction==0 || direction==2)
            { direction = 3;
                speedX = 0;
                speedY = -speed;
            }
        }
    }
    /** public void moveIt()
    {
    // save the location of the 'head' segment (segment in front)
    // these are the 'goto' values for the next segment 
    int prevX = snakeBody[0].getX();  
    int prevY = snakeBody[0].getY();  
    // get the direction of movement for the 'head' along horizontal and vertical (0, 1, or -1) 
    int dx = (1 - direction) * ((direction + 1)%2); 
    int dy = (2 - direction) * (direction%2);  
    // get tentative new coordinates for the 'head'    
    int newX = prevX + speed * dx;
    int newY = prevY + speed * dy;
    // if  'head' cannot move, exit method  
    if (newX < 0 || newX > getWidth() - 1) return;
    if (newY < 0 || newY > getHeight() - 1) return;
    // move head  
    snakeBody[0].setLocation(newX, newY);  
    // move body segments of snake 
    for (int i = 1; i < snakeBody.length; i++) 
    { 
    int holdX = snakeBody[i].getX(); 
    int holdY = snakeBody[i].getY();  
    // move segment
    snakeBody[i].setLocation(prevX, prevY);
    // set 'goto' values for next segment  
    prevX = holdX;  
    prevY = holdY;  
    }
    }  
     */
    public void moveIt()
    { 
        // save the location of the 'head' segment (segment in front)
        // these are the 'goto' values for the next segment
        int previousLocationX = snakeBody[0].getX();
        int previousLocationY = snakeBody[0].getY();
        snakeBody[0].setLocation(snakeBody[0].getX()+speedX, snakeBody[0].getY()+speedY);
        // move body segments of snake 
        if(snakeBody[0].getX()!=previousLocationX || snakeBody[0].getY()!=previousLocationY)
        { for(int i=1; i<snakeBody.length; i++)
            {   int holdX = snakeBody[i].getX();
                int holdY = snakeBody[i].getY();
                snakeBody[i].setLocation(previousLocationX, previousLocationY); 
                // set 'goto' values for next segment
                previousLocationX = holdX;
                previousLocationY = holdY; 
            }  
          if(snakeBody[0].getX()==food.getX() && snakeBody[0].getY()==food.getY()) // Checks if the snake eats food
            {
                growSnake(previousLocationX, previousLocationY);
                updateFoodLocation();
                score.add(5);
            }
        } 
        else
        {
            Greenfoot.stop();
        }
    }   
    /**
     * This method will update the length of the Snake.
     */
    private void growSnake(int x, int y)
    {
        Snake s = new Snake();
        Snake oldSnake[] = new Snake[snakeBody.length];
        for(int i=0; i<snakeBody.length; i++)
        {
            oldSnake[i] = snakeBody[i];
        }
        snakeBody = new Snake[snakeBody.length+1];
        for(int i=0; i<snakeBody.length-1; i++)
        {
            snakeBody[i] = oldSnake[i];
        }
        snakeBody[snakeBody.length-1] = s;       
        addObject(snakeBody[snakeBody.length-1], x, y); // adds new snake body actor
    }
    public void updateFoodLocation()
    {
        int x = 0;
        int y = 0;
        boolean overlap = true;
        eaten = false;
        while(overlap)
        {
            x = Greenfoot.getRandomNumber(getWidth());
            y = Greenfoot.getRandomNumber(getHeight());
            for( int i = 0; i < snakeBody.length; i++)
            {
                // Condition to check food will not touch the snake
                if(x!=snakeBody[i].getX() || y!= snakeBody[i].getY())
                {
                    overlap = false;
                    break;
                }
            }
        }
    }
    public void act()
    {
        checkKey();
        moveIt();
    }
}    public void moveIt()
    { 
        // save the location of the 'head' segment (segment in front)
        // these are the 'goto' values for the next segment
        int previousLocationX = snakeBody[0].getX();
        int previousLocationY = snakeBody[0].getY();
        snakeBody[0].setLocation(snakeBody[0].getX()+speedX, snakeBody[0].getY()+speedY);
        // move body segments of snake 
        if(snakeBody[0].getX()!=previousLocationX || snakeBody[0].getY()!=previousLocationY)
        {
            for(int i=1; i<snakeBody.length; i++)
            {   int holdX = snakeBody[i].getX();
                int holdY = snakeBody[i].getY();
                snakeBody[i].setLocation(previousLocationX, previousLocationY); 
                // set 'goto' values for next segment
                previousLocationX = holdX;
                previousLocationY = holdY; 
            }  
            if(snakeBody[0].getX()==food.getX() && snakeBody[0].getY()==food.getY()) // Checks if the snake eats food
            {
                growSnake(previousLocationX, previousLocationY);
                updateFoodLocation();
                score.add(5);
            }
            for(int i=1; i<snakeBody.length; i++) // Checks if the snake eats itself
            {
                if(snakeBody[0].getX()== snakeBody[i].getX() && snakeBody[0].getY()== snakeBody[i].getY())
                {
                    Greenfoot.stop();
                }
            }
        } 
        else
        {
            Greenfoot.stop();
        }
    }  // replace all code starting at line 28 with
        if (getObjectsAt(snakeBody[0].getX(), snakeBody[0].getY(), null).size() == 1) return;
    }
    Greenfoot.stop();
}import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;
/**
 * Write a description of class Playground here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Playground extends World
{
    Snake[] snakeBody;
    String segment;
    Food food;
    Counter score;
    private int direction;
    private int speed;
    private int speedX;
    private int speedY;
    private boolean eaten;
    /**
     * Constructor for objects of class Playground.
     * 
     */
    public Playground()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(600, 400, 1); 
        direction = 0;
        eaten = false;
        speed = 20;
        speedX = speed;
        speedY = 0;
        snakeBody = new Snake[3]; // initialization of the Snake
        for(int i=0; i<snakeBody.length; i++)
        {
          snakeBody[i] = new Snake();
          addObject(snakeBody[i], 90+(snakeBody.length-i)*15, 30); // adding snake actor to the world
       }
        score = new Counter("Score : "); // initialization of the score
        addObject(score, 19*15, 8); // adding score actor to the world
        food = new Food(); // initialization of the food
        addObject(food, 100, 100); // adding food actor to the world
    }
    public void checkKey()
    {
        if(Greenfoot.isKeyDown("right")) // checks if right key is pressed
        {
            if(direction==1 || direction==3)
            { direction = 0;
                speedX = speed;
                speedY = 0;
            }
        }
        else if(Greenfoot.isKeyDown("down")) // checks if down key is pressed
        {
            if(direction==0 || direction==2)
            {direction = 1;
                speedX = 0;
                speedY = speed;
            }
        }
        else if(Greenfoot.isKeyDown("left")) // checks if left key is pressed
        {
            if(direction==1 || direction==3)
            {direction = 2;
                speedX = -speed;
                speedY = 0;
            }
        }
        else if(Greenfoot.isKeyDown("up")) // checks if up key is pressed
        {
            if(direction==0 || direction==2)
            { direction = 3;
                speedX = 0;
                speedY = -speed;
            }
        }
    }
    /** public void moveIt()
    {
    // save the location of the 'head' segment (segment in front)
    // these are the 'goto' values for the next segment 
    int prevX = snakeBody[0].getX();  
    int prevY = snakeBody[0].getY();  
    // get the direction of movement for the 'head' along horizontal and vertical (0, 1, or -1) 
    int dx = (1 - direction) * ((direction + 1)%2); 
    int dy = (2 - direction) * (direction%2);  
    // get tentative new coordinates for the 'head'    
    int newX = prevX + speed * dx;
    int newY = prevY + speed * dy;
    // if  'head' cannot move, exit method  
    if (newX < 0 || newX > getWidth() - 1) return;
    if (newY < 0 || newY > getHeight() - 1) return;
    // move head  
    snakeBody[0].setLocation(newX, newY);  
    // move body segments of snake 
    for (int i = 1; i < snakeBody.length; i++) 
    { 
    int holdX = snakeBody[i].getX(); 
    int holdY = snakeBody[i].getY();  
    // move segment
    snakeBody[i].setLocation(prevX, prevY);
    // set 'goto' values for next segment  
    prevX = holdX;  
    prevY = holdY;  
    }
    }  
     */
    public void moveIt()
    { 
        // save the location of the 'head' segment (segment in front)
        // these are the 'goto' values for the next segment
        int previousLocationX = snakeBody[0].getX();
        int previousLocationY = snakeBody[0].getY();
        snakeBody[0].setLocation(snakeBody[0].getX()+speedX, snakeBody[0].getY()+speedY);
        // move body segments of snake 
        if(snakeBody[0].getX()!=previousLocationX || snakeBody[0].getY()!=previousLocationY)
        {
            for(int i=1; i<snakeBody.length; i++)
            {   int holdX = snakeBody[i].getX();
                int holdY = snakeBody[i].getY();
                snakeBody[i].setLocation(previousLocationX, previousLocationY); 
                // set 'goto' values for next segment
                previousLocationX = holdX;
                previousLocationY = holdY; 
            }  
            if(snakeBody[0].getX()==food.getX() && snakeBody[0].getY()==food.getY()) // Checks if the snake eats food
            {
                growSnake(previousLocationX, previousLocationY);
                updateFoodLocation();
                score.add(5);
            }
            
            if(eaten)
            {
                updateFoodLocation();// updates the location of the food
            }
            if( getObjectsAt(snakeBody[0].getX(),snakeBody[0].getY(), null).size() == 1) return;
            {
                Greenfoot.stop();
            }
        } 
        else
        {
            Greenfoot.stop();
        }
    }   
    /**
     * This method will update the length of the Snake.
     */
    private void growSnake(int x, int y)
    {
        Snake s = new Snake();
        Snake oldSnake[] = new Snake[snakeBody.length];
        for(int i=0; i<snakeBody.length; i++)
        {
            oldSnake[i] = snakeBody[i];
        }
        snakeBody = new Snake[snakeBody.length+1];
        for(int i=0; i<snakeBody.length-1; i++)
        {
            snakeBody[i] = oldSnake[i];
        }
        snakeBody[snakeBody.length-1] = s;       
        addObject(snakeBody[snakeBody.length-1], x, y); // adds new snake body actor
    }
    public void updateFoodLocation()
    {
        int x = 0;
        int y = 0;
        boolean overlap = true;
        eaten = false;
        while(overlap)
        {
            x = Greenfoot.getRandomNumber(getWidth()/15);
            y = Greenfoot.getRandomNumber(getHeight()/15);
            for( int i = 0; i < snakeBody.length; i++)
            {
                // Condition to check food will not touch the snake
                if(x!=snakeBody[i].getX() || y!= snakeBody[i].getY())
                {
                    overlap = false;
                    break;
                }
            }
        }
        food.setLocation(x*15, y*15);
    }
    public void act()
    {
        checkKey();
        moveIt();
    }
}