Q:

Searching for a generic item between two arrayList indexes in Java

I am trying to use the method find() that I created to search an arrayList element of generic type T. When searching, the user must put in the item they are searching for, and two indexes that they would like to search between, startPosition and endPosition. Whenever I run main(), it always prints -1 even though in my test code Chevy is clearly between 0 and 3 in the array. Can anyone help me figure out why it is not printing the proper index that Chevy is located in? Thanks!
AList:
import java.util.Scanner;
public class AList<T> implements ListInterface<T>
{
     private T[] L;
     private T k;
     private int count;

public AList(int s)
{
    L =(T[]) new Object[s];//Allows the client to decide the length of the list ASK HOW TO MAKE IT A SET SIZE OF 20
    count = 0;
}//end of constructor

public void add(T item)throws ListException
{
    if(count == L.length)
        throw new ListException("Cannot add. List is full.");

    if(item == null  || item == "")
        throw new ListException("Error. Unable to add. Cannot add null entries.");

    L[count] = item;
    count++;
}//end of add method

public void add(T item, int position)throws ListException
{
    if(count == 0)
        throw new ListException("Error. Unable to insert. List is empty.");
    if(count == L.length)
        throw new ListException("Error. Unable to insert. List is full");
    if(item == null  || item == "")
        throw new ListException("Error. Unable to insert. Attempt to insert null object.");
    if(position <= 0 || position > count)
        throw new ListException("Error. Unable to insert. Bad position.");

    for(int k = count-1; k >= position-1; k--)
    {
        L[k+1] = L[k];
        L[2] = L[1];
    }
    L[position-1] = item;
    count++;
}//end of insert method

public T get(int position)throws ListException
{
    if(position <= 0 || position > count)
        throw new ListException("Error. Unable to get. Bad position.");
    if(count == 0)
        throw new ListException("Error. Unable to get. List is empty.");

    return L[position-1];
}// End of get method

public T set(T item, int position)throws ListException
{
    if(item == null || item == "")
        throw new ListException("Error. Unable to replace. Replacement cannot be null.");
    if(position <= 0 || position > count)
        throw new ListException("Error. Unable to replace. Bad position.");
    if(count == 0)
        throw new ListException("Error. Unable to replace. List is empty.");

    T temp = L[position-1];
    L[position-1] = item;
    temp = item;

    return temp;

}// End of set method

public int find(T item, int startPosition, int endPosition)throws ListException
{
    if(startPosition < 0 || endPosition > count)
        throw new ListException("Error. Unable to find. Start and/or end position bad.");

    int found;

    if(startPosition > endPosition)
        found = -1;
    else if(item.equals(L[startPosition]))
        found = startPosition;
    else
        found = find(item, startPosition+1, endPosition);

    return found;

}//method for finding

public int size()
{
    return count;
}// End of size method

public String toString()
{
    int k;

    if(count == 0)
        return "The list is empty. \n";

    String temp = "";
    for(k = 0; k < count; k++)
    {
        temp += L[k] += "\n";
    }

    return temp;
}//end of method toString

public T remove(int position)throws ListException
{
    if(count == 0)
        throw new ListException("Error. Unable to remove. List is empty.");
    if(position <= 1 || position >= count)
        throw new ListException("Error. Unable to remove. Bad position.");

    T temp = L[position-1];
    int k;

    for(k = position-1; k <= count; k++)
    {
        L[k] = L[k+1];
    }
    count--;
    return temp;
}//end of remove method

public void clear()
{
    for(int k = count; k > 0; k--)
    {
        count--;
    }
}// End of clear method

public boolean isEmpty()
{
    if(L.length == 0)
        return true;
    else
        return false;

}// End of isEmpty method

}// End of program
Testing code:
public static void main(String[] args)
{
    try
    {
        AList<String> carList = new AList<String>(20);

        carList.add("Ford");
        carList.add("Chevy");
        carList.add("Toyota");
        carList.add("Mercedes");

        System.out.println(carList);

        System.out.println(carList.find("Chevy", 0, 3));
    }
    catch(ListException e)
    {
        System.out.println(e);
    }
}

ListInterface:
public interface ListInterface<T>
{
     public void add(T item)throws ListException;
     public void add(T item, int position)throws ListException;
     public T get(int position)throws ListException;
     public T set(T item, int position)throws ListException;
     public int find(T item, int startPosition, int endPosition);
     public int size();
     public T remove(int position) throws ListException;
     public void clear();
     public boolean isEmpty();
}

A:

You have a condition that explicitly returns -1 if the start position is less than the end position. I believe this is a typo, and you meant to have a > sign there instead of a < sign:
if (startPosition > endPosition) {
// Changed here --^
    return -1;

