Ошибка Java: неверный оператор верхнего уровня - PullRequest
0 голосов
/ 07 декабря 2011

У меня проблемы с запуском следующего кода. Не уверен, что я делаю это правильно, но я пытаюсь, чтобы метод main прочитал два файла, которые я передаю методу в качестве аргументов. Итак, на панели взаимодействий я набираю: run Main(customer.dat, smartphone.dat)

Если я пытаюсь это сделать, я получаю сообщение об ошибке: invalid top level statement

Я приложил основной метод ниже. Куда я иду наперекосяк? Несмотря на то, что код компилируется, я чувствую, что чего-то не хватает в моих методах readFile и / или при вызове основной функции.

Заранее спасибо - я просматривал SO для подобных случаев, однако ничего не вышло. Я прошу прощения, если этот вопрос был опубликован ранее.

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");
      }
    }
  }
}  

Ответы [ 2 ]

0 голосов
/ 23 июля 2014

Вы не можете вызвать основной метод. Причина, по которой он называется основным методом, заключается в том, что он вызывает остальные методы. Но когда вы не выполняете основной метод программы, основанный на DOS, это не является обязательным в отличие от других.

0 голосов
/ 07 декабря 2011

После быстрого поиска, я предполагаю, что вы используете DrJava и его панель взаимодействий.

Вам не нужны эти скобки в команде запуска. Попробуйте run Main customer.dat smartphone.dat вместо.

Это будет запускать метод main класса Main с аргументами customer.dat и smartphone.dat

Источник

...