1

In this project, I'm trying to access information from an ArrayList which contains only the dates which are Strings.

Here is part of the class I tried. If not having the whole class makes it hard to understand I can edit...

public ArrayList<String> getTicketDates(){
           ArrayList<String> theDateArray= new ArrayList<>();
           int i;

           for (i=0; i <tickets.size(); i++){
               if(tickets .get(i).getPurchased()== false){
                 theDateArray.add(tickets.get(i).getDate());
               }
             }
             for(int f=0; f<theDateArray.size();f++){
               System.out.println(theDateArray.get(f)+ " ");
             }
             return theDateArray;
           }       



     public int getTickets(String date){
         int tix= theDateArray.indexOf(date);
         int occurrences= Collections.frequency(theDateArray, tix);
         if (tix>=0){
             System.out.println(occurrences);


         }
         return occurrences;
     }

The 2nd class, I'm trying to count the amount of times one particular date occurs in the previous ArrayList, but it says that theDateArray cannot be resolved to a variable.

One method I've tried is just calling the entire method getTicketDates(), but what it does is it prints out the ArrayList triple, and the occurrences still don't work.

2
  • 4
    You should read about variable scope in java. Your arraylist is currently a local variable and therefor only available in local scope. Commented Apr 28, 2017 at 15:33
  • Sorry, I'm still a newb. Commented Apr 28, 2017 at 15:39

2 Answers 2

0

Your theDateArray variable scope is local to the getTicketDates() method, so you are not able to access it in the other method, so declare it as an instance variable as shown below:

public class YourTicketsClass {

    //declare ArrayList as an instance variable
    ArrayList<String> theDateArray= new ArrayList<>();

    public ArrayList<String> getTicketDates(){
        int i;
        for (i=0; i <tickets.size(); i++){
            if(tickets .get(i).getPurchased()== false){
                 theDateArray.add(tickets.get(i).getDate());
            }
        }
        for(int f=0; f<theDateArray.size();f++){
           System.out.println(theDateArray.get(f)+ " ");
        }
        return theDateArray;
    }       

    public int getTickets(String date){
         int tix= theDateArray.indexOf(date);
         int occurrences= Collections.frequency(theDateArray, tix);
         if (tix>=0){
             System.out.println(occurrences);
         }
        return occurrences;
   }
}
Sign up to request clarification or add additional context in comments.

Comments

0

Define the array list outside of the method, then populate the list inside the method. Like this:

public class YourdataClass {
private List<String> theDateArray = new ArrayList<String>();

public ArrayList<String> getTicketDates(){
       int i;

       for (i=0; i <tickets.size(); i++){
           if(tickets .get(i).getPurchased()== false){
             theDateArray.add(tickets.get(i).getDate());
           }
         }
         for(int f=0; f<theDateArray.size();f++){
           System.out.println(theDateArray.get(f)+ " ");
         }
         return theDateArray;
       }       



 public int getTickets(String date){
     int tix= theDateArray.indexOf(date);
     int occurrences= Collections.frequency(theDateArray, tix);
     if (tix>=0){
         System.out.println(occurrences);


     }
     return occurrences;
 }
}/* end class */

Here are some references. http://www.javawithus.com/tutorial/scope-and-lifetime-of-variables https://en.wikibooks.org/wiki/Java_Programming/Scope

1 Comment

How is this different from my answer posted 9 mins ago?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.