Java Error: Invalid top level statement

情到浓时终转凉″ 提交于 2019-12-11 16:19:30

问题


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: run Main(customer.dat, smartphone.dat)

If I try to do this, I get an error: invalid top level statement

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.

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.

import java.util.*;
import java.io.*;

public class Main
{
  private static ArrayList<Customer> customers = new ArrayList<Customer>(); // array-based list to store customers while reading file
  private static ArrayList<Smartphone> smartphones = new ArrayList<Smartphone>(); // 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 < 1 || dayOfMonth > 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 & 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() >= 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");
      }
    }
  }
}  

回答1:


After quick searching around I assume you're using DrJava and its Interactions Pane.

You don't need those parentheses in the run command. Try run Main customer.dat smartphone.dat instead.

That will run the main method of class Main with arguments customer.dat and smartphone.dat

Source




回答2:


you cannot call the main method. the reason it is called the main method is because it calls the rest of the methods.but when you do not do a DOS based program main method is not compulsory unlike otherwise.



来源:https://stackoverflow.com/questions/8408710/java-error-invalid-top-level-statement

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!