title: Java Error: Invalid top level statement
body: <p>I am having trouble running the following code. Not sure if I am doing this right, but I am trying to have the main method read two files that I am passing to the method as arguments. So in the interactions pane, I am typing:
  <code>run Main(customer.dat, smartphone.dat)</code></p>
  
  <p>If I try to do this, I get an error: <code>invalid top level statement</code></p>
  
  <p>I have attached the main method below. Where am I going awry? Even though the code compiles I have a feeling I am missing something with my readFile methods and/or calling the main function.</p>
  
  <p>Thanks in advance -- I did look through SO for similar cases, however nothing came up. I apologize if this type of question has been posted before.</p>
  
  <pre><code>import java.util.*;
  import java.io.*;
  
  public class Main
  {
    private static ArrayList&lt;Customer&gt; customers = new ArrayList&lt;Customer&gt;(); // array-based list to store customers while reading file
    private static ArrayList&lt;Smartphone&gt; smartphones = new ArrayList&lt;Smartphone&gt;(); // array-based list to store smartphones while reading file
    private static MyPriorityQueueSmart[] sections = new MyPriorityQueueSmart[30]; // array of Queues to store sections of store with phones. 30 because max(model#%day = 30)
    private static MyPriorityQueueCust line = new MyPriorityQueueCust(); // Queue to simulate line outside the store
  
    private static void readFileCustomer(String file) // method to read customer.dat
    {
      try
      {
            FileReader input = new FileReader(file);
        BufferedReader bufRead = new BufferedReader(input);
        String line = "";
        line = bufRead.readLine(); // parses first line
        while(line != null)
        {
          String[] tokens = line.split("\\|"); // splits line by vertical bar
          String name = tokens[0]; 
          int patience = Integer.parseInt(tokens[1]);
          int speed = Integer.parseInt(tokens[2]);
          int strength = Integer.parseInt(tokens[3]);
          int budget = Integer.parseInt(tokens[4]);
          int PreferredModel = Integer.parseInt(tokens[5]);
          Customer cust = new Customer(name, patience, speed, strength, budget, PreferredModel); // constructs customer
          customers.add(cust);  // stores customer in list
          line = bufRead.readLine(); // parses next line
        }
      } 
      catch(IOException e) // error-checking
      {
        System.out.println("There was a problem reading the file");
        System.exit(0);
      }
    }
  
    private static void readFileSmartphone(String file) // method to read smartphone.dat
    {
      try
      {
        FileReader input = new FileReader(file);
        BufferedReader bufRead = new BufferedReader(input);
        String line = "";
        line = bufRead.readLine(); // parses first line
        while(line != null)
        {
          String[] tokens = line.split("\\|"); // splits line by vertical bar
          int model = Integer.parseInt(tokens[0]);
          int price = Integer.parseInt(tokens[1]);
          Smartphone smart = new Smartphone(model, price); // constructs smartphone
          smartphones.add(smart); // stores smartphone in list
          line = bufRead.readLine(); // parses nextl ine
        }
      } 
      catch(IOException e) // error-checking
      {
        System.out.println("There was a problem reading the file");
        System.exit(0);
      }
    }
  
    public static void main(String[] args) // string[] args should be the customer file name followed by the smartphone file name
    {
      if(args.length!=2) // error-checking
      {
        System.out.println("Must provide an argument: 2 files names");
        System.exit(0);
      }
  
      readFileCustomer(args[0]); // reads customer.dat
      readFileSmartphone(args[1]); // reads smartphone.dat
  
      Scanner scan = new Scanner(System.in); // 
  
      while(true)
      { 
        System.out.println("1 -- Load Additional Customers");
        System.out.println("2 -- Insert New Phone");
        System.out.println("3 -- Display Customers");
        System.out.println("4 -- Start Simulation");
        System.out.println("5 -- Exit");
  
        int choice = scan.nextInt();
  
        if(choice == 1)
        {
          System.out.println("Enter the file name of the customer data: ");
          String name = scan.next();
          readFileCustomer(name);
        }
  
        else if(choice == 2)
        {
          System.out.println("Enter model# (100, 200, 300, 400): ");
          int model = scan.nextInt();
          System.out.println("Enter price of phone: ");
          int price = scan.nextInt();
          Smartphone smart = new Smartphone(model, price);
          smartphones.add(smart);
        }
  
        else if(choice == 3)
        {
          for(Customer cust: customers)
          {
            System.out.println(cust.getName() + ", ");
          }
        }
  
        else if(choice == 4)
        {
          // Start Simulation
          System.out.println("Please enter the current day (#) of the month: "); // necessary for hashing
          int dayOfMonth = scan.nextInt(); // reads user-input for current day of the month
          if(dayOfMonth &lt; 1 || dayOfMonth &gt; 31) // error-checking
          {
            System.out.println("Invalid date. Please re-enter the current day (#) of the month: ");
            dayOfMonth = scan.nextInt();
          }
  
          // Reorganize customers into PQ -- simulating the "line" outside the doors according to skills
          for(Customer cust: customers) // iterates through array-based list of customers generated during file-reading
          {
            line.offer(cust); // builds the line of customers at the front of the store in order of ability
          }
  
          // Reorganize smartphones into PQ by type -- simulating the "most expensive" phones in order
          for(Smartphone smart: smartphones)
          {
            int model = smart.getModel(); // store model of current phone in list
            int hash = model % (dayOfMonth + 20); // generate hash tag
            boolean confirmAdd = false; // required for recursion -- will turn to true if phone is added
            while(confirmAdd = false)
            {
              if(sections[hash].isEmpty() == true || sections[hash].peek().getModel() == model) // check if hash index is empty or holds same model 
              {
                sections[hash].offer(smart); // add the phone to the PQ @ the index
                confirmAdd = true; // toggle to confirm the addition of the phone
              }
              else
                hash = (hash + 1) % 30; // linear probing
            }
          }
  
          // Customers leave line, go to section &amp; buy most expensive phone if possible
          while(line.isEmpty() == false) // makes sure there are people in the line
          {
            Customer firstInLine = (Customer)line.peek(); // locates first customer in line
            int PreferredModel = firstInLine.getPreferredModel(); // stores preference of said customer
            int hash = PreferredModel%(dayOfMonth+20); // generates hash tag to direct customer to correct section
            if(sections[hash].isEmpty() == false) // makes sure the section has not sold out
            {
              if(firstInLine.getBudget() &gt;= sections[hash].peek().getPrice()) // checks if phone is within budget of customer
              {
                Smartphone boughtPhone = (Smartphone)sections[hash].remove(); // customer buys phone and phone is removed from display
                System.out.println(firstInLine.getName() + "has bought phone model# " + boughtPhone.getModel() + "at the price of " + boughtPhone.getPrice()); // prints results
              }
              else // phone is out of budget of customer
                System.out.println(firstInLine.getName() + "cannot afford phone model# " + sections[hash].peek().getModel() + "at the price of " + sections    [hash].peek().getPrice() + "and leaves the store"); // prints results
            }
            else
            {
              System.out.println(firstInLine.getName() + "is out of luck. The phone he or she wants is sold out");
            }
            line.remove(); // as the first person in line has entered the store, he leaves the line and the line moves up
          }
        } // recursive loop until the line is empty
  
        else if(choice == 5)
        {
          System.exit(0);
        }
  
        else
        {
          System.out.println("Enter a number from 1 - 5");
        }
      }
    }
  }  
  </code></pre>