beyonchayyy
beyonchayyy

Reputation: 93

Index in for method is not increasing

Ok this might seem easy but its been bugging my mind for days and I honestly don't know why it the index wont increase and get the other data. I dont know where to but the return. I placed it in 2 lines and the first one only gives the first row of data from the database and the second one only gives the last one from the database. (See commented out lines below). How to get each row that fits the if-statements?

Here's my code:

public Object[] populateTable(ArrayList<Outlet> outletList, String selection, int size, int monthCtr, String selDay){ 

    for(int i = 0; i<outletList.size(); i++){
        if(outletList.get(i).getCity().equalsIgnoreCase(selection)){
            if(outletList.get(i).getStatus().equals("ACTIVE")){
                bar = outletList.get(i).getBarangay();
                code = Integer.toString(outletList.get(i).getCode());
                name = outletList.get(i).getName();

                data = new Object[]{bar, name, code};
                //return data ->gives the first one in the database
            }
        }
    }
  }
   //return data -> gives the last one in the database
}

Upvotes: 0

Views: 68

Answers (3)

monstertjie_za
monstertjie_za

Reputation: 7803

Your problem here is as follow:

  1. Your first return statement, will exit the for loop, and return the first object, as your results have shown.

  2. Your second return statement, will, as you have explained, only return the last record that was iterated over in the for loop.

  3. Your third problem is on this line data = new Object[]{bar, name, code};. After every loop, you instantiate the data object to a new array of objects, instead of adding the values to the array, so essentially, you are always creating an array of objects with 1 item in it, the last one that was iterated.

If you want to return all objects in the array, you should try the following:

public Object[] populateTable(ArrayList<Outlet> outletList, String selection, int size, int monthCtr, String selDay)
    {
        Object[] result = new Object[outletList.size()];
        for (int i = 0; i < outletList.size(); i++)
        {
            if (outletList.get(i).getCity().equalsIgnoreCase(selection))
            {
                if (outletList.get(i).getStatus().equals("ACTIVE"))
                {
                    bar = outletList.get(i).getBarangay();
                    code = Integer.toString(outletList.get(i).getCode());
                    name = outletList.get(i).getName();

                    var data = new { bar, name, code };
                    result[i] = data;
                }
            }
        }
        return result;
    }

Upvotes: 0

FadyAro
FadyAro

Reputation: 11

try this:

public List<Outlet> populateTable(ArrayList<Outlet> outletList, String selection, int size, int monthCtr, String selDay){ 

    List<Outlet> data = new ArrayList<Outlet>();

    for(int i = 0; i < outletList.size(); i++){
        if(outletList.get(i).getCity().equalsIgnoreCase(selection) && 
            outletList.get(i).getStatus().equals("ACTIVE")){
            data.add(outletList.get(i));
        }
    }
    return data;
}

Upvotes: 0

Manfred Radlwimmer
Manfred Radlwimmer

Reputation: 13394

You need to save all your results in another array and return that instead.

public Object[] populateTable(ArrayList<Outlet> outletList, String selection, int size, int monthCtr, String selDay)
{ 
    List<object> result = new List<object>();

    for(int i = 0; i<outletList.size(); i++)
    {
        if(outletList.get(i).getCity().equalsIgnoreCase(selection))
        {
            if(outletList.get(i).getStatus().equals("ACTIVE"))
            {
                bar = outletList.get(i).getBarangay();
                code = Integer.toString(outletList.get(i).getCode());
                name = outletList.get(i).getName();

                data = new Object[]{bar, name, code};
                result.Add(data);
            }
        }
    }
    return result.ToArray();
}

Upvotes: 3

Related Questions